public interface JavaFileManager extends Closeable, Flushable, OptionChecker
Создавая новый JavaFileObjects, файловый менеджер должен определить, где создать их. Например, если бы файловый менеджер управляет регулярными файлами на файловой системе, у него наиболее вероятно был бы текущий/рабочий каталог, чтобы использовать в качестве расположения значения по умолчанию, создавая или находя файлы. Много подсказок могут быть обеспечены для файлового менеджера как, туда, где создать файлы. Любой файловый менеджер мог бы хотеть игнорировать эти подсказки.
Некоторые методы в этом интерфейсе используют имена class. Такие имена class должны быть даны в виртуальной машине Java внутреннюю форму полностью определенного class и имен интерфейса. Для удобства '.' и '/' являются взаимозаменяемыми. Внутренняя форма определяется в главе четыре из Спецификации Виртуальной машины Java™.
Обсуждение: это означает, что имена "java/lang.package-info", "java/lang/package-info", "java.lang.package-информация", допустимы и эквивалентны. Сравнитесь с двоичным именем как определено в Спецификации языка Java™, раздел 13.1" Форма Двоичного файла".
Случай имен является существенным. Все имена должны быть обработаны как чувствительные к регистру. Например, у некоторых файловых систем есть нечувствительные к регистру, осведомленные о случае имена файлов. Объекты файла, представляющие такие файлы, должны заботиться, чтобы сохранить случай при использовании File.getCanonicalFile()
или подобные средства. Если система не осведомлена о случае, объекты файла должны использовать другие средства сохранить случай.
Относительные имена: некоторые методы в этом интерфейсе используют относительные имена. Относительное имя является ненулем, непустой последовательностью сегментов пути, разделенных '/' '.' или '..' недопустимые сегменты пути. Допустимое относительное имя должно соответствовать "беспочвенное путем" правило
URI.create(relativeName).normalize().getPath().equals(relativeName)
Все методы в этом интерфейсе могли бы бросить SecurityException.
Объект этого интерфейса не обязан поддерживать многопоточный доступ, то есть, синхронизироваться. Однако, это должно поддерживать параллельный доступ к различным объектам файла, создаваемым этим объектом.
Примечание реализации: последствие этого требования - то, что тривиальная реализация вывода к JarOutputStream не является достаточной реализацией. Таким образом, вместо того, чтобы создавать JavaFileObject, который возвращает JarOutputStream непосредственно, содержание должно кэшироваться пока не закрыто и затем записано JarOutputStream.
Если явно не позволено, все методы в этом интерфейсе могли бы бросить NullPointerException если дано a null
параметр.
JavaFileObject
, FileObject
Модификатор и Тип | Интерфейс и Описание |
---|---|
static interface |
JavaFileManager. Расположение
Интерфейс для расположений объектов файла.
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
close()
Высвобождает любые средства, открытые этим файловым менеджером прямо или косвенно.
|
void |
flush()
Сбросы любые ресурсы, открытые для вывода этим файловым менеджером прямо или косвенно.
|
ClassLoder |
getClassLoader(JavaFileManager.Location location)
Получает загрузчик class для того, чтобы он загрузил плагины из данного расположения.
|
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)
Получает объект файла для ввода, представляющего указанный class указанного вида в данном расположении.
|
JavaFileObject |
getJavaFileForOutput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling)
Получает объект файла для вывода, представляющего указанный class указанного вида в данном расположении.
|
boolean |
handleOption(String current, Iterator<String> remaining)
Дескрипторы одна опция.
|
boolean |
hasLocation(JavaFileManager.Location location)
Определяет, известно ли расположение этому файловому менеджеру.
|
Строка |
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)
Списки все объекты файла, соответствующие данные критерии в данном расположении.
|
isSupportedOption
ClassLoader getClassLoader(JavaFileManager.Location location)
ANNOTATION_PROCESSOR_PATH
расположение.location
- расположениеnull
если загрузка плагинов от данного расположения отключается или если расположение не известноSecurityException
- если загрузчик class не может быть создан в текущем контексте защитыIllegalStateException
- если close()
был вызван и этот файловый менеджер не может быть вновь открытIterable<JavaFileObject> list(JavaFileManager.Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) throws IOException
Отметьте: даже если данное расположение неизвестно этому файловому менеджеру, оно, возможно, не возвращается null
. Кроме того, неизвестное расположение, возможно, не вызывает исключение.
location
- расположениеpackageName
- имя пакетаkinds
- возвратите объекты только этих видовrecurse
- если истина включает "подпакеты"IOException
- если ошибка ввода-вывода произошла, или если close()
был вызван и этот файловый менеджер не может быть вновь открытIllegalStateException
- если close()
был вызван и этот файловый менеджер не может быть вновь открытString inferBinaryName(JavaFileManager.Location location, JavaFileObject file)
location
- расположениеfile
- объект файлаnull
объект файла не находится в данном расположенииIllegalStateException
- если close()
был вызван и этот файловый менеджер не может быть вновь открытboolean isSameFile(FileObject a, FileObject b)
a
- объект файлаb
- объект файлаIllegalArgumentException
- если любой из параметров создавался с другим файловым менеджером, и этот файловый менеджер не поддерживает внешние объекты файлаboolean handleOption(String current, Iterator<String> remaining)
current
опция к этому файловому менеджеру, от которого она использует любые параметры той опции remaining
и возвратите true, иначе возвратите false.current
- текущая опцияremaining
- оставление опциямиIllegalArgumentException
- если эта опция к этому файловому менеджеру используется неправильноIllegalStateException
- если close()
был вызван и этот файловый менеджер не может быть вновь открытboolean hasLocation(JavaFileManager.Location location)
location
- расположениеJavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind) throws IOException
location
- расположениеclassName
- имя classkind
- вид файла, должен быть один из SOURCE
или CLASS
null
если файл не существуетIllegalArgumentException
- если расположение не известно этому файловому менеджеру, и файловый менеджер не поддерживает неизвестные расположения, или если вид не допустимIOException
- если ошибка ввода-вывода произошла, или если close()
был вызван и этот файловый менеджер не может быть вновь открытIllegalStateException
- если close()
был вызван и этот файловый менеджер не может быть вновь открытJavaFileObject getJavaFileForOutput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException
Дополнительно, этот файловый менеджер мог бы рассмотреть одноуровневый элемент как подсказку для того, куда поместить вывод. Точная семантика этой подсказки является неуказанной. Компилятор JDK, javac, например, поместит файлы class в те же самые каталоги как порождающий исходные файлы, если выходной каталог файла class не будет обеспечен. Чтобы облегчить это поведение, javac мог бы обеспечить инициирующий исходный файл как одноуровневый элемент, вызывая этот метод.
location
- расположениеclassName
- имя classkind
- вид файла, должен быть один из SOURCE
или CLASS
sibling
- объект файла, который будет использоваться в качестве подсказки для размещения; мог бы быть null
IllegalArgumentException
- если одноуровневый элемент не известен этому файловому менеджеру, или если расположение не известно этому файловому менеджеру, и файловый менеджер не поддерживает неизвестные расположения, или если вид не допустимIOException
- если ошибка ввода-вывода произошла, или если close()
был вызван и этот файловый менеджер не может быть вновь открытIllegalStateException
- close()
вызвали, и этот файловый менеджер не может быть вновь открытFileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException
Если возвращенный объект представляет источник или файл class, это должен быть экземпляр 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()
был вызван и этот файловый менеджер не может быть вновь открытFileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException
Дополнительно, этот файловый менеджер мог бы рассмотреть одноуровневый элемент как подсказку для того, куда поместить вывод. Точная семантика этой подсказки является неуказанной. Компилятор JDK, javac, например, поместит файлы class в те же самые каталоги как порождающий исходные файлы, если выходной каталог файла class не будет обеспечен. Чтобы облегчить это поведение, javac мог бы обеспечить инициирующий исходный файл как одноуровневый элемент, вызывая этот метод.
Если возвращенный объект представляет источник или файл class, это должен быть экземпляр JavaFileObject
.
Неофициально, объект файла, возвращенный этим методом, располагается в связи расположения, имени пакета, и относительного имени или рядом с одноуровневым параметром. См. getFileForInput
для примера.
location
- расположениеpackageName
- имя пакетаrelativeName
- относительное имяsibling
- объект файла, который будет использоваться в качестве подсказки для размещения; мог бы быть null
IllegalArgumentException
- если одноуровневый элемент не известен этому файловому менеджеру, или если расположение не известно этому файловому менеджеру, и файловый менеджер не поддерживает неизвестные расположения, или если relativeName
не допустимоIOException
- если ошибка ввода-вывода произошла, или если close()
был вызван и этот файловый менеджер не может быть вновь открытIllegalStateException
- если close()
был вызван и этот файловый менеджер не может быть вновь открытvoid flush() throws IOException
flush
в интерфейсе Flushable
IOException
- если ошибка ввода-вывода произошлаclose()
void close() throws IOException
close
в интерфейсе AutoCloseable
close
в интерфейсе Closeable
IOException
- если ошибка ввода-вывода произошлаflush()
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92