Интерфейс JavaFileManager
- Все суперинтерфейсы:
- AutoCloseable, Closeable, Flushable, OptionChecker
- Все известные подинтерфейсы:
- StandardJavaFileManager
- Все известные реализующие классы:
- ForwardingJavaFileManager
public interface JavaFileManager extends Closeable, Flushable, OptionChecker
Менеджер файлов для инструментов, работающих с исходными файлами и файлами классов языка программирования Java™. В этом контексте файл означает абстракцию обычных файлов и других источников данных.
При создании новых JavaFileObjects менеджер файлов должен определить, где их создавать. Например, если менеджер файлов управляет обычными файлами в файловой системе, он, скорее всего, будет использовать текущую/рабочую директорию в качестве места по умолчанию при создании или поиске файлов. Менеджеру файлов могут быть предоставлены подсказки о том, где создавать файлы. Любой менеджер файлов может игнорировать эти подсказки.
Некоторые методы в этом интерфейсе используют имена классов. Такие имена классов должны быть предоставлены во внутренней форме виртуальной машины Java в виде полностью квалифицированных имён классов и интерфейсов. Для удобства '.' и '/' взаимозаменяемы. Внутренняя форма определена в главе четвёртой спецификации The Java™ Virtual Machine Specification.
Обсуждение: это означает, что имена "java/lang.package-info", "java/lang/package-info", "java.lang.package-info" являются допустимыми и эквивалентными. Сравните с бинарным именем, как определено в The Java™ Language Specification, раздел 13.1 "Форма бинарного файла".
Регистр имён имеет значение. Все имена должны рассматриваться как чувствительные к регистру. Например, некоторые файловые системы имеют нечувствительные к регистру, но чувствительные к регистру имена файлов. Объекты файлов, представляющие такие файлы, должны позаботиться о сохранении регистра, используя File.getCanonicalFile() или аналогичные средства. Если система не чувствительна к регистру, объекты файлов должны использовать другие средства для сохранения регистра.
Относительные имена: некоторые методы в этом интерфейсе используют относительные имена. Относительный имя — это непустая последовательность сегментов пути, разделённых '/'. '.' или '..' — недопустимые сегменты пути. Допустимый относительный путь должен соответствовать правилу "path-rootless" из RFC 3986, раздел 3.3. Неформально, это должно быть верно:
URI.create(relativeName).normalize().getPath().equals(relativeName)
Все методы в этом интерфейсе могут выбрасывать исключение SecurityException.
Объект этого интерфейса не обязан поддерживать многопоточный доступ, то есть быть синхронизированным. Однако он должен поддерживать одновременный доступ к различным объектам файлов, созданным этим объектом.
Примечание для реализации: следствием этого требования является то, что тривиальная реализация вывода в JarOutputStream не является достаточной реализацией. То есть, вместо создания JavaFileObject, который возвращает JarOutputStream напрямую, содержимое должно кэшироваться до закрытия, а затем записываться в JarOutputStream.
Если не разрешено явно, все методы этого интерфейса могут выбросить NullPointerException, если им будет передан null аргумент.
- С:
- 1.6
- См. также:
-
JavaFileObject,FileObject
Вложенные классы
| Модификатор и тип | Интерфейс и описание |
|---|---|
static interface |
JavaFileManager.Location Интерфейс для расположения объектов файлов. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
close() Освобождает все ресурсы, открытые этим менеджером файлов напрямую или косвенно. |
void |
flush() Очищает все ресурсы, открытые для вывода этим менеджером файлов напрямую или косвенно. |
ClassLoader |
getClassLoader(JavaFileManager.Location location) Получает загрузчик классов для загрузки плагинов из заданного расположения. |
FileObject |
getFileForInput(JavaFileManager.Location location,
String packageName,
String relativeName) Получает объект файла для чтения, представляющий указанное относительное имя в указанном пакете в заданном расположении. |
FileObject |
getFileForOutput(JavaFileManager.Location location,
String packageName,
String relativeName,
FileObject sibling) Получает объект файла для записи, представляющий указанное относительное имя в указанном пакете в заданном расположении. |
JavaFileObject |
getJavaFileForInput(JavaFileManager.Location location,
String className,
JavaFileObject.Kind kind) Получает объект файла для чтения, представляющий указанный класс заданного типа в заданном расположении. |
JavaFileObject |
getJavaFileForOutput(JavaFileManager.Location location,
String className,
JavaFileObject.Kind kind,
FileObject sibling) Получает объект файла для записи, представляющий указанный класс заданного типа в заданном расположении. |
boolean |
handleOption(String current,
Iterator<String> remaining) Обрабатывает один параметр. |
boolean |
hasLocation(JavaFileManager.Location location) Определяет, известно ли менеджеру файлов указанное расположение. |
String |
inferBinaryName(JavaFileManager.Location location,
JavaFileObject file) Выводит бинарное имя объекта файла на основе расположения. |
boolean |
isSameFile(FileObject a,
FileObject b) Сравнивает два объекта файла и возвращает true, если они представляют один и тот же базовый объект. |
Iterable<JavaFileObject> |
list(JavaFileManager.Location location,
String packageName,
Set<JavaFileObject.Kind> kinds,
boolean recurse) Перечисляет все объекты файлов, соответствующие заданным критериям в заданном расположении. |
Методы, унаследованные от интерфейса javax.tools.OptionChecker
isSupportedOption Методы
getClassLoader
ClassLoader getClassLoader(JavaFileManager.Location location)
Получает загрузчик классов для загрузки плагинов из указанного расположения. Например, для загрузки процессоров аннотаций компилятор запросит загрузчик классов для расположения ANNOTATION_PROCESSOR_PATH.
- Параметры:
-
location- расположение - Возвращает:
- загрузчик классов для данного расположения; или
nullесли загрузка плагинов из данного расположения отключена или расположение неизвестно - Исключения:
-
SecurityException- если загрузчик классов не может быть создан в текущем контексте безопасности -
IllegalStateException- еслиclose()был вызван и этот менеджер файлов не может быть повторно открыт
list
Iterable<JavaFileObject> list(JavaFileManager.Location location,
String packageName,
Set<JavaFileObject.Kind> kinds,
boolean recurse)
throws IOException Перечисляет все объекты файлов, соответствующие заданным критериям в заданном расположении. Перечисляет объекты файлов в «подпакетах», если recurse равно true.
Примечание: даже если данное расположение неизвестно этому менеджеру файлов, он может не вернуть null. Кроме того, неизвестное расположение может не вызвать исключения.
- Параметры:
-
location- расположение -
packageName- имя пакета -
kinds- возвращать объекты только этих типов -
recurse- если true, включать «подпакеты» - Возвращает:
- Iterable объектов файлов, соответствующих заданным критериям
- Исключения:
-
IOException- если произошла ошибка ввода-вывода или еслиclose()был вызван и этот менеджер файлов не может быть повторно открыт -
IllegalStateException- еслиclose()был вызван и этот менеджер файлов не может быть повторно открыт
inferBinaryName
String inferBinaryName(JavaFileManager.Location location,
JavaFileObject file) Выводит имя двоичного файла на основе объекта файла и расположения. Возвращаемое двоичное имя может не являться допустимым двоичным именем в соответствии со Спецификацией языка Java™.
- Параметры:
-
location- расположение -
file- объект файла - Возвращает:
- двоичное имя или
nullесли объект файла не найден в указанном расположении - Исключения:
-
IllegalStateException- еслиclose()был вызван и этот менеджер файлов не может быть повторно открыт
isSameFile
boolean isSameFile(FileObject a,
FileObject b) Сравнивает два объекта файла и возвращает true, если они представляют один и тот же базовый объект.
- Параметры:
-
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, будет размещать файлы классов в тех же каталогах, что и исходные файлы, если не указан каталог вывода файлов классов. Для реализации этого поведения 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 для примера.
- Параметры:
-
location- расположение -
packageName- имя пакета -
relativeName- относительное имя -
sibling- объект файла, используемый в качестве подсказки для размещения; может бытьnull - Возвращает:
- объект файла
- Исключение:
-
IllegalArgumentException- если братский файл не известен этому файловому менеджеру, или если расположение не известно этому файловому менеджеру, и файловый менеджер не поддерживает неизвестные расположения, или еслиrelativeNameнедействителен -
IOException- если произошла ошибка ввода-вывода, или еслиclose()был вызван, и этот файловый менеджер не может быть повторно открыт -
IllegalStateException- еслиclose()был вызван, и этот файловый менеджер не может быть повторно открыт
flush
void flush()
throws IOException Очищает любые ресурсы, открытые для вывода этим файловым менеджером непосредственно или косвенно. Очистка закрытого файлового менеджера не оказывает никакого влияния.
- Указано в:
-
flushв интерфейсеFlushable - Исключение:
-
IOException- если произошла ошибка ввода-вывода - См. также:
close()
close
void close()
throws IOException Освобождает любые ресурсы, открытые этим файловым менеджером непосредственно или косвенно. Это может сделать этот файловый менеджер бесполезным, и эффект последующих вызовов методов этого объекта или любых объектов, полученных через этот объект, не определен, если явно не разрешен. Однако закрытие файлового менеджера, который уже был закрыт, не оказывает никакого влияния.
- Указано в:
-
closeв интерфейсеAutoCloseable - Указано в:
-
closeв интерфейсеCloseable - Исключение:
-
IOException- если произошла ошибка ввода-вывода - См. также:
flush()
© 1993, 2020, 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.