public interface JavaFileManager extends Closeable, Flushable, OptionChecker
ファイル・マネージャで新しいJavaFileObjectを構築する際は、それらをどこに作成するかを指定する必要があります。たとえば、ファイル・マネージャを使ってファイル・システム上の通常ファイルを管理する場合は、現在のディレクトリ(作業ディレクトリ)を、ファイルの作成や検索を行うデフォルトの場所として使用するのが一般的です。ファイル・マネージャには、ファイルの作成場所を示すヒントが多数提供される可能性があります。これらのヒントを無視するように、ファイル・マネージャを設定することもできます。
このインタフェースに含まれる一部のメソッドは、クラス名を使用します。これらのクラス名は、『Java仮想マシン仕様』で定義されている内部形式で、完全指定のクラス名およびインタフェース名として指定する必要があります。便宜上、「.」と「/」は交換可能です。内部形式の定義については、『Java(tm)仮想マシン仕様』の第4章を参照してください。
解説: この場合、「java/lang.package-info」、「java/lang/package-info」、「java.lang.package-info」の3種類の名前がすべて有効で、等価であることになります。『Java(tm)言語仕様』のセクション13.1「バイナリの形式」に定義されたバイナリ名と比較してください。
名前の大文字と小文字を正しく区別する必要があります。すべての名前の大文字と小文字が区別されます。たとえば、ファイル名の大文字と小文字の区別は行わないが、その違いを認識するファイル・システムがあるとします。この場合、File.getCanonicalFile()
または同様の手段を使って、ファイル・オブジェクト(ファイルを表す)の大文字と小文字の区別を保持するようにします。システムが大文字と小文字の区別を認識しない場合は、その他の手段で、ファイル・オブジェクトの大文字と小文字の区別を保持する必要があります。
相対名: このインタフェースに含まれる一部のメソッドは、相対名を使用します。相対名は、一連のパス・セグメント(null以外、空以外)を「/」で区切った形式の名前です。「.」または「..」は無効なパス・セグメントです。有効な相対名は、RFC 3986のセクション 3.3の「path-rootless」規則に従う必要があります。非公式には、次の条件がtrueになるようにします。
URI.create(relativeName).normalize().getPath().equals(relativeName)
このインタフェースに含まれるすべてのメソッドは、SecurityExceptionをスローする可能性があります。
このインタフェースのオブジェクトは、マルチスレッド・アクセスをサポートしていなくてもかまいません。つまり、同期化は必要ありません。ただし、このオブジェクトによって作成された複数のファイル・オブジェクトへの並行アクセスはサポートしている必要があります。
実装にあたっての注意: この要件があるため、JarOutputStreamへの出力の単純な実装では、実装として不十分です。そこで、JarOutputStreamを直接返すJavaFileObjectを作成するのではなく、コンテンツをキャッシュに格納し、終了したらJarOutputStreamに書き込むようにします。
明示的に許可されていない場合に引数としてnull
が指定されると、このインタフェースに含まれるすべてのメソッドはNullPointerExceptionをスローする可能性があります。
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)
1つのオプションを処理します。
|
boolean |
hasLocation(JavaFileManager.Location location)
このファイル・マネージャにとって既知の場所であるかどうかを判断します。
|
String |
inferBinaryName(JavaFileManager.Location location, JavaFileObject file)
場所に基づいてファイル・オブジェクトのバイナリ名を推測します。
|
boolean |
isSameFile(FileObject a, FileObject b)
2つのファイル・オブジェクトを比較し、これらによって表される配下のオブジェクトが同じである場合は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
- 現在のセキュリティ・コンテキストでクラス・ローダーを作成できない場合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
- 入出力エラーが発生した場合、または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
- 入出力エラーが発生した場合、またはclose()
が呼び出され、このファイル・マネージャを再度開くことができない場合IllegalStateException
- close()
が呼び出され、このファイル・マネージャを再度開くことができない場合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()
が呼び出され、このファイル・マネージャを再度開くことができない場合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
- 入出力エラーが発生した場合、またはclose()
が呼び出され、このファイル・マネージャを再度開くことができない場合IllegalStateException
- close()
が呼び出され、このファイル・マネージャを再度開くことができない場合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()
が呼び出され、このファイル・マネージャを再度開くことができない場合void flush() throws IOException
flush
、インタフェース: Flushable
IOException
- 入出力エラーが発生した場合close()
void close() throws IOException
close
、インタフェース: AutoCloseable
close
、インタフェース: Closeable
IOException
- 入出力エラーが発生した場合flush()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.