|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface JavaFileManager
在 Java™ 程式語言源和類別檔案之上進行操作的工具的檔案管理器。在這裡,檔案 是指常規檔案和其他資料源的抽象。
建構新的 JavaFileObject 時,檔案管理器必須確定創建它們的位置。例如,如果檔案管理器在檔案系統上管理常規檔案,那麼在創建或尋找檔案時,此檔案管理器很可能將當前/工作目錄作為預設位置使用。可以向檔案管理器提供許多關於在何處創建檔案的提示。檔案管理器可以選擇忽略這些提示。
此介面中的某些方法使用類別名稱。這種類別名稱必須以完全限定類別和介面名稱的 Java Virtual Machine 內部形式給定。為了方便起見,'.' 和 '/' 可以互換使用。在 Java Virtual Machine Specification 第四章中定義了內部形式。
討論:這意味著名稱 "java/lang.package-info"、"java/lang/package-info"、"java.lang.package-info" 有效並且相等。比較 Java Language Specification (JLS) 第 13.1 節 "The Form of a Binary" 中定義的二進制名稱。
名稱的大小寫很重要。所有名稱都應該區分大小寫。例如,某些檔案系統的檔案名稱大小寫不敏感 (case-insensitive)、但可區分大小寫 (case-aware)。表示此類別檔案的檔案物件應該通過使用 File.getCanonicalFile()
或類似方法來保存大小寫形式。如果系統不可區分大小寫,那麼檔案物件必須使用其他方法來保存大小寫。
相對名稱:此介面中的某些方法使用相對名稱。相對名稱是指用 '/' 分隔的路徑段的非 null、非空(null)序列。'.' 或 '..' 為無效路徑段。有效的相對名稱必須符合 RFC 3986 的第 3.3 節的“無根路徑”規則。非正式情況下,下式應該為 true:
URI.create(relativeName).normalize().getPath().equals(relativeName)
此介面中的所有方法都可能拋出 SecurityException。
不要求此介面的物件支持多執行緒存取,也就是說,此介面中的物件是同步的。但是,它必須支持對此物件創建的不同檔案物件的共時存取。
實作注意事項: 此要求使得對 JarOutputStream 的輸出的普通實作將不夠充分。也就是說,不是創建直接返回 JarOutputStream 的 JavaFileObject,而是在關閉前必須快取記憶體內容,然後將內容寫入 JarOutputStream。
除非明確允許,否則只要給定 null
參數,此介面中的所有方法都將拋出 NullPointerException。
JavaFileObject
,
FileObject
巢狀類別摘要 | |
---|---|
static interface |
JavaFileManager.Location
檔案物件位置的介面。 |
從介面 javax.tools.OptionChecker 繼承的方法 |
---|
isSupportedOption |
方法詳細資訊 |
---|
ClassLoader getClassLoader(JavaFileManager.Location location)
ANNOTATION_PROCESSOR_PATH
位置的類別載入器。
location
- 位置
null
SecurityException
- 如果在當前安全上下文中不能創建類別載入器
IllegalStateException
- 如果已經調用了 close()
並且不能重新打開此檔案管理器Iterable<JavaFileObject> list(JavaFileManager.Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) throws IOException
註:即使給定位置對於此檔案管理器是未知的,此方法也不會返回 null
。未知位置也不會導致異常。
location
- 位置packageName
- 套件名稱kinds
- 只返回這些型別的物件recurse
- 如果為 true,則包含“子包”
IOException
- 如果發生 I/O 錯誤,或者已經調用了 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
- 類別的名稱kind
- 檔案的型別,必須是 SOURCE
或 CLASS
null
IllegalArgumentException
- 如果位置對於此檔案管理器未知並且該檔案管理器不支持未知位置,或者型別無效
IOException
- 如果發生 I/O 錯誤,或者已經調用了 close()
並且無法重新打開此檔案管理器
IllegalStateException
- 如果已經調用了 close()
並且無法重新打開此檔案管理器JavaFileObject getJavaFileForOutput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException
此檔案管理器可以將 sibling 視為對放置輸出位置的提示(可選)。沒有指定此提示的確切語義。除非提供了類別檔案輸出目錄,否則 Sun 的編譯器(例如 javac)將把類別檔案放到與原始源檔案相同的目錄下。要實作此行為,調用此方法時 javac 可以提供原始源檔案作為 sibling。
location
- 位置className
- 類別的名稱kind
- 檔案的型別,必須是 SOURCE
或 CLASS
sibling
- 用作位置提示的檔案物件,可以為 null
IllegalArgumentException
- 如果 sibling 對於此檔案管理器是未知的,或者位置對於此檔案管理器是未知的並且該檔案管理器不支持未知位置,或者型別無效
IOException
- 如果發生 I/O 錯誤,或者已經調用了 close()
並且無法重新打開此檔案管理器
IllegalStateException
- 已經調用了 close()
並且無法重新打開此檔案管理器FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException
如果返回的物件表示源或類別檔案,則它必須是 JavaFileObject
的一個實例。
非嚴格意義上來講,在位置、套件名稱和相對名稱的串聯中尋找此方法返回的檔案物件。例如,要在 SOURCE_PATH 位置處的 "com.sun.tools.javac" 套件中尋找屬性檔案 "resources/compiler.properties",將調用此方法,如下:
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
- 如果發生 I/O 錯誤,或者已經調用了 close()
並且無法重新打開此檔案管理器
IllegalStateException
- 如果已經調用了 close()
並且無法重新打開此檔案管理器FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException
此檔案管理器可能將 sibling 視為對放置輸出位置的提示(可選)。沒有指定此提示的確切語義。除非提供了類別檔案輸出目錄,否則 Sun 的編譯器(例如 javac)將把類別檔案放到與原始源檔案相同的目錄下。要實作此行為,調用此方法時 javac 可以提供原始源檔案作為 sibling。
如果返回的物件表示源或類別檔案,則它必須是 JavaFileObject
的一個實例。
非正式情況下,在位置、套件名稱和相對名稱的串聯或 sibling 參數的同級元素中尋找此方法返回的檔案物件。有關範例,請參閱 getFileForInput
。
location
- 位置packageName
- 套件名稱relativeName
- 相對名稱sibling
- 用作位置提示的檔案物件;可以為 null
IllegalArgumentException
- 如果 sibling 對於此檔案管理器是未知的,或者位置對於此檔案管理器是未知的並且該檔案管理器不支持未知位置,或者 relativeName
無效
IOException
- 如果發生 I/O 錯誤,或者已經調用了 close()
並且無法重新打開此檔案管理器
IllegalStateException
- 如果已經調用了 close()
並且無法重新打開此檔案管理器void flush() throws IOException
Flushable
中的 flush
IOException
- 如果發生 I/O 錯誤close()
void close() throws IOException
Closeable
中的 close
IOException
- 如果發生 I/O 錯誤flush()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。