Интерфейс JavaFileManager
- Все суперинтерфейсы:
-
AutoCloseable,Closeable,Flushable,OptionChecker
- Все известные подинтерфейсы:
StandardJavaFileManager
- Все известные реализующие классы:
ForwardingJavaFileManager
public interface JavaFileManager extends Closeable, Flushable, OptionChecker
При создании новых JavaFileObjects менеджер файлов должен определить, где их создавать. Например, если менеджер файлов управляет обычными файлами на файловой системе, он, скорее всего, будет иметь текущую/рабочую директорию, чтобы использовать ее в качестве стандартного расположения при создании или поиске файлов. Менеджеру файлов могут быть предоставлены подсказки о том, где создавать файлы. Любой менеджер файлов может выбрать игнорирование этих подсказок.
Некоторые методы в этом интерфейсе используют имена классов. Такие имена классов должны быть предоставлены в внутренней форме виртуальной машины Java с полными квалифицированными именами классов и интерфейсов. Для удобства '.' и '/' взаимозаменяемы. Внутренняя форма определена в главе четыре Спецификации виртуальной машины Java.
Обсуждение: это означает, что имена "java/lang.package-info", "java/lang/package-info", "java.lang.package-info" допустимы и эквивалентны. Сравни с бинарным именем, как определено в Спецификации языка Java, раздел 13.1 «Форма бинарного файла».
Регистр имен важен. Все имена должны рассматриваться как чувствительные к регистру. Например, некоторые файловые системы имеют нечувствительные к регистру, но чувствительные к регистру имена файлов. Объекты файлов, представляющие такие файлы, должны позаботиться о сохранении регистра, используя File.getCanonicalFile() или аналогичные средства. Если система нечувствительна к регистру, объекты файлов должны использовать другие средства для сохранения регистра.
Относительные имена: некоторые методы в этом интерфейсе используют относительные имена. Относительный имя — это непустая последовательность сегментов пути, разделенных '/'. '.' или '..' недопустимы в качестве сегментов пути. Допустимое относительное имя должно соответствовать правилу «без корня пути» из RFC 3986, раздел 3.3. Неформально, это должно быть так:
URI.create(relativeName).normalize().getPath().equals(relativeName)
Все методы в этом интерфейсе могут выбрасывать исключение SecurityException.
Объект этого интерфейса не обязан поддерживать многопотоковый доступ, то есть быть синхронизированным. Однако он должен поддерживать одновременный доступ к различным объектам файлов, созданным этим объектом.
Примечание для реализации: следствием этого требования является то, что тривиальная реализация вывода в JarOutputStream не является достаточной реализацией. То есть, вместо создания JavaFileObject, который возвращает JarOutputStream напрямую, содержимое должно кэшироваться до закрытия, а затем записываться в JarOutputStream.
Если явно не разрешено, все методы этого интерфейса могут вызвать исключение NullPointerException, если получат null аргумент.
- С момента:
- 1.6
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
JavaFileManager.Location |
Интерфейс для расположения объектов файлов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Освобождает все ресурсы, открытые этим менеджером файлов напрямую или косвенно. |
default boolean |
contains |
Определяет, содержится ли данный объект файла в указанном расположении. |
void |
flush() |
Очищает все ресурсы, открытые для вывода этим менеджером файлов напрямую или косвенно. |
ClassLoader |
getClassLoader |
Возвращает загрузчик классов для загрузки плагинов из заданного расположения, ориентированного на пакет. |
FileObject |
getFileForInput |
Возвращает объект файла для ввода, представляющий заданное относительное имя в указанном пакете в заданном расположении, ориентированном на пакет. |
FileObject |
getFileForOutput |
Возвращает объект файла для вывода, представляющий заданное относительное имя в указанном пакете в заданном расположении. |
JavaFileObject |
getJavaFileForInput |
Возвращает объект файла для ввода, представляющий указанный класс заданного типа в заданном расположении, ориентированном на пакет. |
JavaFileObject |
getJavaFileForOutput |
Возвращает объект файла для вывода, представляющий указанный класс заданного типа в заданном расположении, ориентированном на пакет. |
default JavaFileManager.Location |
getLocationForModule |
Получает расположение для указанного модуля внутри расположения, которое может быть расположением, ориентированным на модуль, или расположением для вывода. |
default JavaFileManager.Location |
getLocationForModule |
Получает расположение для модуля, содержащего определенный файл, который должен быть найден внутри расположения, которое может быть расположением, ориентированным на модуль, или расположением для вывода. |
default <S> ServiceLoader<S> |
getServiceLoader |
Получает загрузчик сервиса для определенного класса сервиса из заданного расположения. |
boolean |
handleOption |
Обрабатывает один параметр. |
boolean |
hasLocation |
Определяет, известно ли менеджеру файлов расположение. |
String |
inferBinaryName |
Вычисляет бинарное имя объекта файла на основе расположения, ориентированного на пакет. |
default String |
inferModuleName |
Определяет имя модуля по его расположению, возвращаемому getLocationForModule или listModuleLocations. |
boolean |
isSameFile |
Сравнивает два объекта файла и возвращает true, если они представляют один и тот же базовый объект. |
Iterable<JavaFileObject> |
list |
Выводит все объекты файлов, соответствующие заданным критериям в заданном расположении, ориентированном на пакет. |
default Iterable<Set<JavaFileManager.Location>> |
listLocationsForModules |
Выводит расположения для всех модулей в расположении, ориентированном на модуль, или расположении для вывода. |
Методы, объявленные в интерфейсе javax.tools.OptionChecker
isSupportedOption
Подробное описание методов
getClassLoader
ClassLoader getClassLoader(JavaFileManager.Location location)
ANNOTATION_PROCESSOR_PATH.- Параметры:
-
location- расположение - Возвращает:
- загрузчик классов для заданного расположения; или
nullесли загрузка плагинов из заданного расположения отключена или расположение неизвестно - Исключения:
-
SecurityException- если загрузчик классов не может быть создан в текущем контексте безопасности -
IllegalStateException- если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalArgumentException- если расположение ориентировано на модули
list
Iterable<JavaFileObject> list(JavaFileManager.Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) throws IOException
Примечание: даже если заданное расположение неизвестно этому менеджеру файлов, он может не вернуть null. Кроме того, неизвестное расположение может не вызвать исключение.
- Параметры:
-
location- расположение -
packageName- имя пакета -
kinds- возвращать объекты только этих типов -
recurse- если true, включать "подпакеты" - Возвращает:
- Iterable объектов файлов, соответствующих заданным критериям
- Исключения:
-
IOException- если произошла ошибка ввода-вывода или если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalArgumentException- если расположение ориентировано на модули -
IllegalStateException- если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт
inferBinaryName
String inferBinaryName(JavaFileManager.Location location, JavaFileObject file)
- Параметры:
-
location- расположение -
file- объект файла - Возвращает:
- двоичное имя или
nullобъект файла не найден в заданном расположении - Исключения:
-
IllegalArgumentException- если расположение ориентировано на модули -
IllegalStateException- если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт
isSameFile
boolean isSameFile(FileObject a, FileObject b)
- Параметры:
-
a- объект файла -
b- объект файла - Возвращает:
- true, если заданные объекты файла представляют один и тот же базовый объект
- Исключения:
-
IllegalArgumentException- если любой из аргументов был создан с другим менеджером файлов, и этот менеджер файлов не поддерживает внешние объекты файлов
handleOption
boolean handleOption(String current, Iterator<String> remaining)
current является параметром для этого менеджера файлов, он потребляет все аргументы к этому параметру из remaining и возвращает true, в противном случае возвращает false.- Параметры:
-
current- текущий параметр -
remaining- оставшиеся параметры - Возвращает:
- true, если этот параметр был обработан этим менеджером файлов, false в противном случае
- Исключения:
-
IllegalArgumentException- если этот параметр для этого менеджера файлов используется неправильно -
IllegalStateException- если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт
hasLocation
boolean hasLocation(JavaFileManager.Location location)
- Параметры:
-
location- расположение - Возвращает:
- true, если расположение известно
getJavaFileForInput
JavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind) throws IOException
- Параметры:
-
location- расположение -
className- имя класса -
kind- тип файла, должен быть одним изSOURCEилиCLASS - Возвращает:
- объект файла, может вернуть
nullесли файл не существует - Исключения:
-
IllegalArgumentException- если расположение не известно этому менеджеру файлов и менеджер файлов не поддерживает неизвестные расположения, или если тип не является допустимым, или если расположение ориентировано на модули -
IOException- если произошла ошибка ввода-вывода или если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт
getJavaFileForOutput
JavaFileObject getJavaFileForOutput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException
По желанию, этот менеджер файлов может учитывать брата как подсказку для размещения вывода. Точные семантика этой подсказки не определена. Например, компилятор JDK, javac, поместит файлы .class в те же каталоги, что и исходные файлы, если не указана каталога вывода файлов .class. Для упрощения этого поведения javac может предоставить исходный файл как брата при вызове этого метода.
- Параметры:
-
location- расположение, ориентированное на пакеты -
className- имя класса -
kind- тип файла, должен быть одним изSOURCEилиCLASS -
sibling- объект файла, используемый в качестве подсказки для размещения; может бытьnull - Возвращает:
- объект файла для вывода
- Исключения:
-
IllegalArgumentException- если брат не известен этому менеджеру файлов, или если расположение не известно этому менеджеру файлов и менеджер файлов не поддерживает неизвестные расположения, или если тип не является допустимым, или если расположение не является расположением вывода -
IOException- если произошла ошибка ввода-вывода или если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- методclose()был вызван, и этот менеджер файлов не может быть повторно открыт
getFileForInput
FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException
Если возвращаемый объект представляет собой файл исходного или класса, он должен быть экземпляром JavaFileObject.
Неформально, объект файла, возвращаемый этим методом, находится в конкатенации расположения, имени пакета и относительного имени. Например, чтобы найти файл свойств "resources/compiler.properties" в пакете "com.sun.tools.javac" в расположении SOURCE_PATH, этот метод может быть вызван следующим образом:
getFileForInput(SOURCE_PATH, "com.sun.tools.javac", "resources/compiler.properties");
Если вызов был выполнен в Windows, с SOURCE_PATH, заданным на "C:\Documents and Settings\UncleBob\src\share\classes", допустимым результатом был бы объект файла, представляющий файл "C:\Documents and Settings\UncleBob\src\share\classes\com\sun\tools\javac\resources\compiler.properties".
- Параметры:
-
location- расположение, ориентированное на пакеты -
packageName- имя пакета -
relativeName- относительное имя - Возвращает:
- объект файла, может вернуть
nullесли файл не существует - Исключения:
-
IllegalArgumentException- если расположение не известно этому менеджеру файлов и менеджер файлов не поддерживает неизвестные расположения, или еслиrelativeNameне является допустимым, или если расположение ориентировано на модули -
IOException- если произошла ошибка ввода-вывода или если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт
getFileForOutput
FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException
Этот менеджер файлов может принять во внимание брата по папке как подсказку для размещения вывода. Точные семантики этой подсказки не определены. Например, компилятор JDK, javac, разместит файлы классов в тех же директориях, что и исходные файлы, если не указана директория вывода для файлов классов. Для обеспечения этого поведения javac может предоставить исходный файл как брата по папке при вызове этого метода.
Если возвращаемый объект представляет собой файл исходного или класса, он должен быть экземпляром JavaFileObject.
Неформально, объект файла, возвращаемый этим методом, расположен в конкатенации расположения, имени пакета и относительного имени или рядом с аргументом брата по папке. См. getFileForInput для примера.
- Parameters:
-
location- расположение вывода -
packageName- имя пакета -
relativeName- относительное имя -
sibling- объект файла, используемый в качестве подсказки для размещения; может бытьnull - Returns:
- объект файла
- Throws:
-
IllegalArgumentException- если брат по папке неизвестен этому менеджеру файлов, или если расположение неизвестно этому менеджеру файлов и менеджер файлов не поддерживает неизвестные расположения, или еслиrelativeNameнедействительно, или если расположение не является расположением вывода -
IOException- если произошла ошибка ввода-вывода, или еслиclose()был вызван и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- еслиclose()был вызван и этот менеджер файлов не может быть повторно открыт
flush
void flush() throws IOException
- Specified by:
-
flushв интерфейсеFlushable - Throws:
-
IOException- если произошла ошибка ввода-вывода - See Also:
close
void close() throws IOException
- Specified by:
-
closeв интерфейсеAutoCloseable - Specified by:
-
closeв интерфейсеCloseable - Throws:
-
IOException- если произошла ошибка ввода-вывода - See Also:
getLocationForModule
default JavaFileManager.Location getLocationForModule(JavaFileManager.Location location, String moduleName) throws IOException
- Implementation Requirements:
- Эта реализация выбрасывает
UnsupportedOperationException. - Parameters:
-
location- модульное расположение -
moduleName- имя модуля для поиска - Returns:
- расположение для указанного модуля
- Throws:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов -
IllegalArgumentException- если расположение не является расположением вывода и не модульным расположением - Since:
- 9
getLocationForModule
default JavaFileManager.Location getLocationForModule(JavaFileManager.Location location, JavaFileObject fo) throws IOException
- Implementation Requirements:
- Эта реализация выбрасывает
UnsupportedOperationException. - Parameters:
-
location- модульное расположение -
fo- файл - Returns:
- модуль, содержащий файл
- Throws:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов -
IllegalArgumentException- если расположение не является расположением вывода и не модульным расположением - Since:
- 9
getServiceLoader
default <S> ServiceLoader<S> getServiceLoader(JavaFileManager.Location location, Class<S> service) throws IOException
META-INF/services.- Implementation Requirements:
- Эта реализация выбрасывает
UnsupportedOperationException. - Type Parameters:
-
S- класс сервиса - Parameters:
-
location- модульное расположение -
service-Classобъект класса сервиса - Returns:
- загрузчик сервисов для данного класса сервиса
- Throws:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов - Since:
- 9
inferModuleName
default String inferModuleName(JavaFileManager.Location location) throws IOException
getLocationForModule или listModuleLocations.- Implementation Requirements:
- Эта реализация выбрасывает
UnsupportedOperationException. - Parameters:
-
location- расположение пакета, представляющее модуль - Returns:
- имя модуля
- Throws:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов -
IllegalArgumentException- если расположение неизвестно этому менеджеру файлов - Since:
- 9
listLocationsForModules
default Iterable<Set<JavaFileManager.Location>> listLocationsForModules(JavaFileManager.Location location) throws IOException
- Implementation Requirements:
- Эта реализация выбрасывает
UnsupportedOperationException. - Parameters:
-
location- модульное расположение, для которого требуется список модулей - Returns:
- последовательность наборов расположений, содержащих модули
- Throws:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов -
IllegalArgumentException- если расположение не является модульным расположением - Since:
- 9
contains
default boolean contains(JavaFileManager.Location location, FileObject fo) throws IOException
Для расположения пакета объект файла содержится в расположении, если существуют значения для packageName и relativeName, такие что любой из следующих вызовов вернёт объект файла same:
getFileForInput(location, packageName, relativeName)
getFileForOutput(location, packageName, relativeName, null)
Для модульного расположения объект файла содержится в расположении, если существует модуль, который может быть получен вызовом:
getLocationForModule(location, moduleName)
таким образом, что объект файла содержится в (расположении пакета) для этого модуля.- Implementation Requirements:
- Эта реализация выбрасывает
UnsupportedOperationException. - Parameters:
-
location- расположение -
fo- объект файла - Returns:
- содержится ли файл в расположении
- Throws:
-
IOException- если возникла проблема при определении результата -
UnsupportedOperationException- если метод не поддерживается - Since:
- 9
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.compiler/javax/tools/JavaFileManager.html