Package javax.tools

Interface StandardJavaFileManager

  • All Superinterfaces:
    AutoCloseable, Closeable, Flushable, JavaFileManager, OptionChecker

    public interface StandardJavaFileManager
    extends JavaFileManager
    File manager based on java.io.File and java.nio.file.Path. A common way to obtain an instance of this class is using getStandardFileManager, for example:
       JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
       DiagnosticCollector<JavaFileObject> diagnostics =
           new DiagnosticCollector<JavaFileObject>();
       StandardJavaFileManager fm = compiler.getStandardFileManager(diagnostics, null, null);
     
    This file manager creates file objects representing regular files, zip file entries, or entries in similar file system based containers. Any file object returned from a file manager implementing this interface must observe the following behavior: According to these rules, the following URIs, for example, are allowed:
    • file:///C:/Documents%20and%20Settings/UncleBob/BobsApp/Test.java
    • jar:///C:/Documents%20and%20Settings/UncleBob/lib/vendorA.jar!/com/vendora/LibraryClass.class
    Whereas these are not (reason in parentheses):
    • file:BobsApp/Test.java (the file name is relative and depend on the current directory)
    • jar:lib/vendorA.jar!/com/vendora/LibraryClass.class (the first half of the path depends on the current directory, whereas the component after ! is legal)
    • Test.java (this URI depends on the current directory and does not have a schema)
    • jar:///C:/Documents%20and%20Settings/UncleBob/BobsApp/../lib/vendorA.jar!com/vendora/LibraryClass.class (the path is not normalized)

    All implementations of this interface must support Path objects representing files in the default file system. It is recommended that implementations should support Path objects from any filesystem.

    API Note:
    Some methods on this interface take a Collection<? extends Path> instead of Iterable<? extends Path>. This is to prevent the possibility of accidentally calling the method with a single Path as such an argument, because although Path implements Iterable<Path>, it would almost never be correct to call these methods with a single Path and have it be treated as an Iterable of its components.
    Since:
    1.6