ファイルの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を作成できます。
サンプルのでは、EmailprobeContentTypeメソッドを使用しています。
デフォルトのファイル・システムを取得するには、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メソッドを使用しています。