ファイルのMIMEタイプを判断するには、probeContentType(Path)
メソッドが便利です。 次のように使用します。
try { String type = Files.probeContentType(filename); if (type == null) { System.err.format("'%s' has an unknown filetype.%n", filename); } else if (!type.equals("text/plain") { System.err.format("'%s' is not a plain text file.%n", filename); continue; } } catch (IOException x) { System.err.println(x); }
コンテンツ・タイプ(Content-Type)を判断できない場合、probeContentType
はnullを返します。
このメソッドの実装は大部分がプラットフォーム固有であり、確実なものではありません。 コンテンツ・タイプはプラットフォームのデフォルトのファイル・タイプ・ディテクタによって判断されます。 たとえば、ディテクタが.class
拡張子に基づいてファイルのコンテンツ・タイプをapplication/x-java
と判断した場合は、誤っている可能性があります。
デフォルトの動作がニーズに対して不十分な場合、独自のFileTypeDetector
を作成できます。
サンプルの
では、Email
probeContentType
メソッドを使用しています。
デフォルトのファイル・システムを取得するには、getDefault
メソッドを使用します。 一般的な手法として、このFileSystems
(複数形に注意)のメソッドを使用する場合は、次のようにFileSystem
(単数形に注意)のいずれかのメソッドをそのまま続けて呼び出す("メソッド・チェーン")ことが多いです。
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.*");
パスの区切り文字には、POSIXファイル・システムでは通常のスラッシュ(/
)が使用され、Microsoft Windowsではバックスラッシュ(\
)が使用されます。 他のファイル・システムでは、これ以外の区切り文字が使用される可能性があります。 デフォルトのファイル・システムのパス区切り文字を取得するには、次の2つの方法があります。
String separator = File.separator; String separator = FileSystems.getDefault().getSeparator();
また、利用できる任意のファイル・システムのパス区切り文字を取得する場合にも、getSeparator
メソッドを使用できます。
ファイル・システムには、ファイルやディレクトリを保存するための1つ以上のファイル・ストアが存在します。 ファイル・ストアとは、基盤となるストレージ・デバイスを表します。 UNIXオペレーティング・システムでは、マウントされたファイル・システムのそれぞれがファイル・ストアとなります。 Microsoft Windowsでは、C:
、D:
などの各ボリュームがファイル・ストアとなります。
ファイル・システムのすべてのファイル・ストアのリストを取得するには、getFileStores
メソッドを使用できます。 このメソッドはIterable
インタフェースを実装するオブジェクトを返します。このオブジェクトでは拡張for文を使用して、すべてのルート・ディレクトリに対する反復処理を実行できます。
for (FileStore store: FileSystems.getDefault().getFileStores()) { ... }
特定のファイルが保存されているファイル・ストアを取得する場合は、Files
クラスのgetFileStore
メソッドを次のように使用します。
Path file = ...; FileStore store= Files.getFileStore(file);
サンプルのDiskUsage
では、getFileStores
メソッドを使用しています。