Интерфейс JavaFileManager
- Все суперинтерфейсы:
-
AutoCloseable,Closeable,Flushable,OptionChecker
- Все известные дочерние интерфейсы:
StandardJavaFileManager
- Все известные реализующие классы:
ForwardingJavaFileManager
public interface JavaFileManager extends Closeable, Flushable, OptionChecker
При создании новых JavaFileObject менеджер файлов должен определить, где их создавать. Например, если менеджер файлов управляет обычными файлами в файловой системе, он, скорее всего, будет иметь текущую/рабочую директорию в качестве места по умолчанию при создании или поиске файлов. Менеджеру файлов могут быть предоставлены подсказки о том, где создавать файлы. Любой менеджер файлов может игнорировать эти подсказки.
Некоторые методы в этом интерфейсе используют имена классов. Такие имена классов должны быть предоставлены во внутренней форме виртуальной машины Java для полных квалифицированных имён классов и интерфейсов. Для удобства '.' и '/' взаимозаменяемы. Внутренняя форма определена в четвёртой главе Спецификации виртуальной машины Java.
Обсуждение: это означает, что имена "java/lang.package-info", "java/lang/package-info", "java.lang.package-info" являются допустимыми и эквивалентными. Сравните с именем двоичного файла, как определено в Спецификации языка Java, раздел 13.1 "Форма двоичного файла".
Регистр символов важен. Все имена должны рассматриваться как чувствительные к регистру. Например, некоторые файловые системы имеют нечувствительные к регистру, но чувствительные к регистру имена файлов. Объекты файлов, представляющие такие файлы, должны позаботиться о сохранении регистра, используя File.getCanonicalFile() или аналогичные средства. Если система нечувствительна к регистру, объекты файлов должны использовать другие средства для сохранения регистра.
Относительные имена: некоторые методы в этом интерфейсе используют относительные имена. Относительное имя — это непустая последовательность сегментов пути, разделённых '/'. '.' или '..' являются недопустимыми сегментами пути. Допустимое относительное имя должно соответствовать правилу "path-rootless" из RFC 3986, раздел 3.3. Неформально, это должно быть истинно:
Все методы в этом интерфейсе могут выбросить исключение 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 |
Возвращает объект файла для вывода, представляющий заданное относительное имя в указанном пакете в заданном расположении. |
default FileObject |
getFileForOutputForOriginatingFiles |
Возвращает объект файла для вывода, представляющий заданное относительное имя в указанном пакете в заданном расположении. |
JavaFileObject |
getJavaFileForInput |
Возвращает объект файла для ввода, представляющий указанный класс заданного типа в заданном расположении в стиле пакета. |
JavaFileObject |
getJavaFileForOutput |
Возвращает объект файла для вывода, представляющий указанный класс заданного типа в заданном расположении в стиле пакета. |
default JavaFileObject |
getJavaFileForOutputForOriginatingFiles |
Возвращает объект файла для вывода, представляющий указанный класс заданного типа в заданном расположении в стиле пакета. |
default JavaFileManager.Location |
getLocationForModule |
Получает расположение для модуля с именем внутри расположения, которое может быть либо модульным расположением, либо расположением вывода. |
default JavaFileManager.Location |
getLocationForModule |
Получает расположение для модуля, содержащего определённый файл, который должен быть найден внутри расположения, которое может быть либо модульным расположением, либо расположением вывода. |
default <S> ServiceLoader |
getServiceLoader |
Получает загрузчик сервисов для конкретного класса сервиса из заданного расположения. |
boolean |
handleOption |
Обрабатывает один параметр. |
boolean |
hasLocation |
Определяет, известно ли данное расположение этому менеджеру файлов. |
String |
inferBinaryName |
Выводит двоичное имя объекта файла на основе расположения в стиле пакета. |
default String |
inferModuleName |
Определяет имя модуля по его расположению, возвращённому getLocationForModule или listModuleLocations. |
boolean |
isSameFile |
Сравнивает два объекта файлов и возвращает true, если они представляют один и тот же базовый объект. |
Iterable |
list |
Выводит все объекты файлов, соответствующие заданным критериям в заданном расположении в стиле пакета. |
default Iterable |
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 в те же директории, что и исходные файлы .java, если не указан выходной каталог для файлов .class. Чтобы облегчить это поведение, javac может предоставить исходный файл .java в качестве sibling при вызове этого метода.
- Параметры:
-
location- местоположение, ориентированное на пакет -
className- имя класса -
kind- тип файла, должен быть одним изSOURCEилиCLASS -
sibling- объект файла, используемый в качестве подсказки для размещения; может бытьnull - Возвращает:
- объект файла для вывода
- Исключения:
-
IllegalArgumentException- если братский файл неизвестен этому менеджеру файлов, или если местоположение неизвестно этому менеджеру файлов и менеджер файлов не поддерживает неизвестные местоположения, или если тип недействителен, или если местоположение не является выходным -
IOException- если произошла ошибка ввода-вывода, или если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- методclose()был вызван и этот менеджер файлов не может быть повторно открыт
getJavaFileForOutputForOriginatingFiles
default JavaFileObject getJavaFileForOutputForOriginatingFiles(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject... originatingFiles) throws IOException
Предоставленные originatingFiles представляют файлы, которые, каким-то неопределенным образом, использовались для создания содержимого файла, созданного этим методом. См. originatingElements в Filer.createSourceFile(java.lang.CharSequence, javax.lang.model.element.Element...). Elements.getFileObjectOf(javax.lang.model.element.Element) может использоваться для преобразования Element в FileObject.
- Требования к реализации:
- Базовая реализация вызывает
getJavaFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, javax.tools.JavaFileObject.Kind, javax.tools.FileObject)с первым элементомoriginatingFiles, если таковой имеется, в качествеsibling. - Параметры:
-
location- местоположение, ориентированное на пакет -
className- имя класса -
kind- тип файла, должен быть одним изSOURCEилиCLASS -
originatingFiles- файлы, которые вносят вклад в этот недавно созданный файл;nullэквивалентно пустомуoriginatingFiles, означающему, что нет известных файлов происхождения - Возвращает:
- объект файла для вывода
- Исключения:
-
IllegalArgumentException- если братский файл неизвестен этому менеджеру файлов, или если местоположение неизвестно этому менеджеру файлов и менеджер файлов не поддерживает неизвестные местоположения, или если тип недействителен, или если местоположение не является выходным -
IOException- если произошла ошибка ввода-вывода, или если методclose()был вызван, и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- методclose()был вызван и этот менеджер файлов не может быть повторно открыт - С:
- 18
- См. также:
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.
Неформально, объект файла, возвращаемый этим методом, находится в результате конкатенации расположения, имени пакета и относительного имени или рядом с аргументом sibling. См. getFileForInput для примера.
- Параметры:
-
location- расположение вывода -
packageName- имя пакета -
relativeName- относительное имя -
sibling- объект файла, используемый в качестве подсказки для размещения; может бытьnull - Возвращает:
- объект файла
- Выбрасывает:
-
IllegalArgumentException- если sibling неизвестен этому файловому менеджеру, или если расположение неизвестно этому файловому менеджеру и файловый менеджер не поддерживает неизвестные расположения, или еслиrelativeNameнедействительно, или если расположение не является расположением вывода -
IOException- если произошла ошибка ввода-вывода, или еслиclose()был вызван и этот файловый менеджер не может быть повторно открыт -
IllegalStateException- еслиclose()был вызван и этот файловый менеджер не может быть повторно открыт
getFileForOutputForOriginatingFiles
default FileObject getFileForOutputForOriginatingFiles(JavaFileManager.Location location, String packageName, String relativeName, FileObject... originatingFiles) throws IOException
Предоставленные originatingFiles представляют файлы, которые каким-то неспецифицированным способом использовались для создания содержимого файла, созданного этим методом. См. originatingElements в Filer.createResource(javax.tools.JavaFileManager.Location, java.lang.CharSequence, java.lang.CharSequence, javax.lang.model.element.Element...). Elements.getFileObjectOf(javax.lang.model.element.Element) может быть использован для преобразования Element в FileObject.
Если возвращаемый объект представляет собой файл исходного кода или класса, он должен быть экземпляром JavaFileObject.
Неформально, объект файла, возвращаемый этим методом, находится в результате конкатенации расположения, имени пакета и относительного имени или в расположении, выведенном из originatingFiles. См. getFileForInput для примера.
- Требования к реализации:
- По умолчанию реализация вызывает
getFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, java.lang.String, javax.tools.FileObject)с первым элементомoriginatingFiles, если таковой имеется, в качествеsibling. - Параметры:
-
location- расположение вывода -
packageName- имя пакета -
relativeName- относительное имя -
originatingFiles- файлы, которые вносят вклад в этот новый созданный файл;nullэквивалентно пустомуoriginatingFiles, что означает, что известных файлов-источников нет - Возвращает:
- объект файла
- Выбрасывает:
-
IllegalArgumentException- если sibling неизвестен этому файловому менеджеру, или если расположение неизвестно этому файловому менеджеру и файловый менеджер не поддерживает неизвестные расположения, или еслиrelativeNameнедействительно, или если расположение не является расположением вывода -
IOException- если произошла ошибка ввода-вывода, или еслиclose()был вызван и этот файловый менеджер не может быть повторно открыт -
IllegalStateException- еслиclose()был вызван и этот файловый менеджер не может быть повторно открыт - С:
- 18
- См. также:
flush
void flush() throws IOException
- Определено в:
-
flushв интерфейсеFlushable - Выбрасывает:
-
IOException- если произошла ошибка ввода-вывода - См. также:
close
void close() throws IOException
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Выбрасывает:
-
IOException- если произошла ошибка ввода-вывода - См. также:
getLocationForModule
default JavaFileManager.Location getLocationForModule(JavaFileManager.Location location, String moduleName) throws IOException
- Требования к реализации:
- Эта реализация выбрасывает
UnsupportedOperationException. - Параметры:
-
location- модульно-ориентированное расположение -
moduleName- имя модуля для поиска - Возвращает:
- расположение для заданного модуля
- Выбрасывает:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим файловым менеджером -
IllegalArgumentException- если расположение не является ни расположением вывода, ни модульно-ориентированным расположением - С:
- 9
getLocationForModule
default JavaFileManager.Location getLocationForModule(JavaFileManager.Location location, JavaFileObject fo) throws IOException
- Требования к реализации:
- Эта реализация выбрасывает
UnsupportedOperationException. - Параметры:
-
location- модульно-ориентированное расположение -
fo- файл - Возвращает:
- модуль, содержащий файл
- Выбрасывает:
-
IOException- если произошла ошибка ввода-вывода -
UnsupportedOperationException- если эта операция не поддерживается этим файловым менеджером -
IllegalArgumentException- если расположение не является ни расположением вывода, ни модульно-ориентированным расположением - С:
- 9
getServiceLoader
default <S> ServiceLoader<S> getServiceLoader(JavaFileManager.Location location, Class<S> service) throws IOException
META-INF/services.- Требования к реализации:
- Эта реализация выбрасывает
UnsupportedOperationException. - Параметры типа:
-
S- класс сервиса - Параметры:
-
location- расположение, ориентированное на модули -
service- объектClassкласса сервиса - Возвращаемое значение:
- загрузчик сервисов для данного класса сервиса
- Исключения:
-
IOException- если произошла ошибка ввода/вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов - С момента:
- 9
inferModuleName
default String inferModuleName(JavaFileManager.Location location) throws IOException
getLocationForModule или listModuleLocations.- Требования к реализации:
- Эта реализация выбрасывает
UnsupportedOperationException. - Параметры:
-
location- расположение, ориентированное на пакеты, представляющее модуль - Возвращаемое значение:
- имя модуля
- Исключения:
-
IOException- если произошла ошибка ввода/вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов -
IllegalArgumentException- если расположение не известно этому менеджеру файлов - С момента:
- 9
listLocationsForModules
default Iterable<Set<JavaFileManager.Location>> listLocationsForModules(JavaFileManager.Location location) throws IOException
- Требования к реализации:
- Эта реализация выбрасывает
UnsupportedOperationException. - Параметры:
-
location- расположение, ориентированное на модули, для которого необходимо перечислить модули - Возвращаемое значение:
- ряд наборов расположений, содержащих модули
- Исключения:
-
IOException- если произошла ошибка ввода/вывода -
UnsupportedOperationException- если эта операция не поддерживается этим менеджером файлов -
IllegalArgumentException- если расположение не является расположением, ориентированным на модули - С момента:
- 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)
- Требования к реализации:
- Эта реализация выбрасывает
UnsupportedOperationException. - Параметры:
-
location- расположение -
fo- объект файла - Возвращаемое значение:
- содержится ли файл в расположении
- Исключения:
-
IOException- если возникла проблема с определением результата -
UnsupportedOperationException- если метод не поддерживается - С момента:
- 9
© 1993, 2023, 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/21/docs/api/java.compiler/javax/tools/JavaFileManager.html