モジュール java.base
パッケージ java.nio.file

クラスFileSystem

  • すべての実装されたインタフェース:
    Closeable, AutoCloseable

    public abstract class FileSystem
    extends Object
    implements Closeable
    ファイル・システムへのインタフェースを提供し、ファイル・システム内のファイルやその他のオブジェクトにアクセスするためのオブジェクトのファクトリです。

    FileSystems.getDefaultメソッドを呼び出して取得されるデフォルトのファイル・システムは、Java仮想マシンからアクセス可能なファイル・システムへのアクセスを提供します。 FileSystemsクラスは、ほかの種類の(カスタム)ファイル・システムへのアクセスを提供するファイル・システムを作成するためのメソッドを定義します。

    ファイル・システムは、いくつかの種類のオブジェクトのファクトリです。

    ファイル・システムはきわめて多種多様です。 あるケースでは、ファイル・システムは最上位のルート・ディレクトリを1つ持つ単一のファイル階層になります。 別のケースでは、いくつかの異なるファイル階層を保有し、それぞれの階層に独自の最上位のルート・ディレクトリがあります。 getRootDirectoriesメソッドを使用すると、ファイル・システム内のルート・ディレクトリを反復処理できます。 ファイル・システムは通常、ファイル用のストレージを提供する1つまたは複数のベースとなるファイル・ストアで構成されます。 これらのファイル・ストアはサポートしている機能、およびファイルに関連付けるファイル属性やメタデータにもさまざまな違いがある可能性があります。

    ファイル・システムは、作成時には開いていて、そのcloseメソッドを呼び出して閉じることができます。 いったん閉じたあとで、そのファイル・システム内のオブジェクトにアクセスしようとすると、ClosedFileSystemExceptionがスローされます。 デフォルト・プロバイダによって作成されたファイル・システムを閉じることはできません。

    FileSystemは、ファイル・システムへの読取り専用または読み取り/書込みアクセスを提供できます。 ファイル・システムが読取り専用アクセスを提供するかどうかは、FileSystemの作成時に設定され、そのisReadOnlyメソッドを呼び出すことで確認できます。 読取り専用のファイル・システムに関連付けられたオブジェクトを使ってファイル・ストアへの書込みを試みると、ReadOnlyFileSystemExceptionがスローされます。

    ファイル・システムは、複数の並行スレッドで安全に使用できます。 いつでもcloseメソッドを呼び出してファイル・システムを閉じることができますが、ファイル・システムが非同期クローズ可能であるかどうかはプロバイダ固有のものであるため、未指定です。 つまり、あるスレッドがファイル・システム内のオブジェクトにアクセスしているときに、別のスレッドがcloseメソッドを呼び出した場合、最初の操作が完了するまでそのメソッドはブロックされる必要があることがあります。 ファイル・システムを閉じると、ファイル・システムに関連付けられた開いているチャネル、監視サービス、およびその他のクローズ可能なオブジェクトがすべて閉じます。

    導入されたバージョン:
    1.7
    • コンストラクタの詳細

      • FileSystem

        protected FileSystem()
        このクラスの新しいインスタンスを初期化します。
    • メソッドの詳細

      • provider

        public abstract FileSystemProvider provider()
        このファイル・システムの作成元プロバイダを返します。
        戻り値:
        このファイル・システムの作成元プロバイダ。
      • close

        public abstract void close()
                            throws IOException
        このファイル・システムを閉じます。

        ファイル・システムが閉じたあとは、このクラスで定義されたメソッドによる、またはこのファイル・システムに関連付けられたオブジェクトに対する、ファイル・システムへの後続のすべてのアクセスでClosedFileSystemExceptionがスローされます。 ファイル・システムがすでに閉じている場合は、このメソッドを呼び出しても何の効果もありません。

        ファイル・システムを閉じると、このファイル・システムに関連付けられた開いているチャネルディレクトリ・ストリーム監視サービス、およびその他のクローズ可能なオブジェクトがすべて閉じます。 デフォルトのファイル・システムを閉じることはできません。

        定義:
        close、インタフェースAutoCloseable
        定義:
        close、インタフェースCloseable
        例外:
        IOException - 入出力エラーが発生した場合
        UnsupportedOperationException - デフォルトのファイル・システムの場合にスローされる
      • isOpen

        public abstract boolean isOpen()
        このファイル・システムが開いているかどうかを判断します。

        デフォルト・プロバイダによって作成されたファイル・システムは常に開いています。

        戻り値:
        このファイル・システムが開いている場合にかぎりtrue
      • isReadOnly

        public abstract boolean isReadOnly()
        このファイル・システムが、ファイル・ストアに対する読取り専用アクセスのみを許可するかどうかを判断します。
        戻り値:
        このファイル・システムが読取り専用アクセスを提供する場合にかぎりtrue
      • getSeparator

        public abstract String getSeparator()
        文字列として表された名前区切り文字を返します。

        名前区切り文字は、パス文字列内の名前を区切るために使用されます。 実装では複数の名前区切り文字をサポートしていることがありますが、その場合、このメソッドは実装固有のデフォルトの名前区切り文字を返します。 この区切り文字は、toString()メソッドの呼出しによってパス文字列を作成するときに使用されます。

        デフォルト・プロバイダの場合、このメソッドはFile.separatorと同じ区切り文字を返します。

        戻り値:
        名前区切り文字
      • getRootDirectories

        public abstract Iterable<Path> getRootDirectories()
        ルート・ディレクトリのパスを反復するためのオブジェクトを返します。

        ファイル・システムは、いくつかの異なるファイル階層(それぞれに独自の最上位のルート・ディレクトリがある)で構成されている可能性のあるファイル・ストアへのアクセスを提供します。 セキュリティ・マネージャによって拒否されないかぎり、返されるイテレータの各要素は個別のファイル階層のルート・ディレクトリに対応します。 要素の順番は定義されていません。 ファイル階層は、Java仮想マシンの有効期間中に変更される可能性があります。 たとえば、一部の実装では、リムーバブル・メディアの挿入によって独自の最上位ディレクトリを持つ新しいファイル階層が作成されることがあります。

        セキュリティ・マネージャがインストールされている場合は、各ルート・ディレクトリへのアクセスをチェックするためにそれが呼び出されます。 拒否された場合、そのルート・ディレクトリはイテレータによって返されません。 デフォルト・プロバイダの場合は、SecurityManager.checkRead(String)メソッドが呼び出されて各ルート・ディレクトリへの読取りアクセスがチェックされます。 イテレータの取得時または反復中にアクセス権のチェックが行われるかどうかはシステムに依存します。

        戻り値:
        ルート・ディレクトリを反復処理するオブジェクト
      • getFileStores

        public abstract Iterable<FileStore> getFileStores()
        ベースとなるファイル・ストアを反復するためのオブジェクトを返します。

        返されるイテレータの要素は、このファイル・システムのFileStoresです。 それらの要素の順番は定義されておらず、ファイル・ストアはJava仮想マシンの有効期間中に変更される可能性があります。 ファイル・ストアにアクセスできないなどの理由で入出力エラーが発生した場合、それはイテレータによって返されません。

        デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、そのセキュリティ・マネージャが呼び出されてRuntimePermission(「getFileStoreAttributes」)がチェックされます。 拒否された場合、イテレータによって返されるファイル・ストアはありません。 さらに、セキュリティ・マネージャのSecurityManager.checkRead(String)メソッドが呼び出されて、ファイル・ストアの最上位ディレクトリへの読取りアクセスがチェックされます。 拒否された場合、そのファイル・ストアはイテレータによって返されません。 イテレータの取得時または反復中にアクセス権のチェックが行われるかどうかはシステムに依存します。

        使用例: すべてのファイル・ストアの領域使用量を出力するとします。

             for (FileStore store: FileSystems.getDefault().getFileStores()) {
                 long total = store.getTotalSpace() / 1024;
                 long used = (store.getTotalSpace() - store.getUnallocatedSpace()) / 1024;
                 long avail = store.getUsableSpace() / 1024;
                 System.out.format("%-20s %12d %12d %12d%n", store, total, used, avail);
             }
         

        戻り値:
        バッキング・ファイル・ストアを反復処理するオブジェクト
      • supportedFileAttributeViews

        public abstract Set<String> supportedFileAttributeViews()
        このFileSystemによってサポートされるファイル属性ビューの名前のセットを返します。

        BasicFileAttributeViewはサポートされる必要があるため、そのセットには少なくとも1つの要素「basic」が含まれています。

        supportsFileAttributeView(String)メソッドを使用すると、ベースとなるFileStoreが、ファイル属性ビューで識別されるファイル属性をサポートするかどうかを判定できます。

        戻り値:
        サポートされるファイル属性ビューの変更不可能な名前セット
      • getPath

        public abstract Path getPath​(String first,
                                     String... more)
        1つのパス文字列または、連結すると1つのパス文字列を形成する文字列のシーケンスを、Pathに変換します。 moreに要素が指定されていない場合は、firstパラメータの値は変換するパス文字列です。 moreに1つ以上の要素が指定されている場合は、空でない各文字列(firstを含む)は名前要素のシーケンスであるとみなされ(Pathを参照)、結合されてパス文字列に形成されます。 文字列の結合方法の詳細はプロバイダ固有ですが、通常は名前区切り文字を区切り文字として使用して結合されます。 たとえば、名前区切り文字が"/"でgetPath("/foo","bar","gus")が呼び出された場合、パス文字列"/foo/bar/gus"Pathに変換されます。 firstが空の文字列でmoreに空でない文字列が含まれない場合は、空のパスを示すPathが返されます。

        パス・オブジェクトの解析および変換は、本質的に実装に依存しています。 もっとも単純なケースでは、ファイル・ストアにとって有効な文字に変換できない文字がパス文字列に含まれている場合、そのパス文字列は拒否され、InvalidPathExceptionがスローされます。 たとえば、UNIXシステムでは、NUL (\u0000)文字をパス内に指定することは許可されません。 実装では、どのファイル・ストアでも許可される名前よりも長い名前を含むパス文字列を拒否することもでき、複雑なパス構文を実装でサポートしている場合は、不正な形式のパス文字列を拒否することもできます。

        デフォルト・プロバイダの場合は、プラットフォームまたは仮想ファイル・システム・レベルのパスの定義に基づいてパス文字列が解析されます。 たとえば、オペレーティング・システムではファイル名に特定の文字を指定することを許可しない場合がありますが、ベースとなる特定のファイル・ストアで、正当な文字セットに対して異なる制限または追加の制限を設けることができます。

        このメソッドは、パス文字列をパスに変換できない場合にInvalidPathExceptionをスローします。 可能な場合、かつ適切な場合は、パス文字列が拒否される原因となった、pathパラメータ内の最初の位置を示すインデックス値でその例外が作成されます。

        パラメータ:
        first - パス文字列またはパス文字列の最初の部分
        more - 結合してパス文字列を形成するための追加文字列
        戻り値:
        結果のPath
        例外:
        InvalidPathException - パス文字列を変換できない場合
      • getPathMatcher

        public abstract PathMatcher getPathMatcher​(String syntaxAndPattern)
        指定されたパターンを解釈することにより、PathオブジェクトのString表現に対するマッチ操作を実行するPathMatcherを返します。 syntaxAndPatternパラメータは、構文とパターンを識別し、次の形式をとります。
         syntax:pattern
         
        ここでの':'はそれ自体を表します。

        FileSystem実装では、「glob」および「regex」構文をサポートしますが、その他をサポートすることもできます。 構文コンポーネントの値は大文字小文字に関係なく比較されます。

        構文が「glob」の場合、パスのString表現のマッチングには、正規表現に似ているが、より単純な構文を持つ制限されたパターン言語が使用されます。 たとえば、

        パターン言語
        説明
        *.java .javaで終わるファイル名を表すパスに一致します
        *.* ドットを含むファイル名に一致します
        *.{java,class} .javaまたは.classで終わるファイル名に一致します
        foo.? foo.と1文字の拡張子で始まるファイル名に一致します
        /home/*/* UNIXプラットフォームでの/home/gus/dataに一致します
        /home/** UNIXプラットフォームでの/home/gus/home/gus/dataに一致します
        C:\\* WindowsプラットフォームでのC:\fooC:\barに一致します(バックスラッシュがエスケープされている。Java言語のリテラル文字列としてのパターンは"C:\\\\*"になる)

        globパターンの解釈には次のルールが使用されます。

        • *文字は、ディレクトリ境界を越えない0 文字以上の名前コンポーネントに一致します。

        • **文字は、ディレクトリ境界を越える0個以上の文字に一致します。

        • ?文字は、厳密に1文字の名前コンポーネントに一致します。

        • バックスラッシュ文字(\)は、そうしない場合は特殊文字として解釈される文字をエスケープするために使用されます。 たとえば、式\\は1つのバックスラッシュに一致し、「\{」は左カッコに一致します。

        • [ ]文字は、一連の文字のうち、1文字の名前コンポーネントに一致するカッコ式です。 たとえば、[abc]"a""b"、または"c"に一致します。 ハイフン(-)は範囲を指定するために使用できるため、[a-z]"a"から"z"まで(aとzを含む)に一致する範囲を指定します。 これらの形式は組み合わせることができるため、[abce-g]は"a""b""c""e""f"、または"g"に一致します。 [のあとの文字が!の場合、それは否定に使用されるため、 [!a-c]"a""b"、または "c"を除くすべての文字に一致します。

          カッコ式の内側では、*?、および\文字はそれ自体に一致します。 (-)文字は、それがカッコ内の最初の文字である場合、または!のあとの最初の文字である場合(否定の場合)は、それ自体に一致します。

        • { }文字はサブパターンのグループであり、そのグループ内のサブパターンが一致すればグループは一致します。 ","文字はサブパターンを区切るために使用されます。 グループを入れ子にすることはできません。

        • ファイル名の先頭のピリオド/ドット文字は、マッチ操作で正規文字とみなされます。 たとえば、globパターン"*"はファイル名".login"に一致します。 Files.isHidden(java.nio.file.Path)メソッドを使用すると、ファイルが隠しファイルとみなされるかどうかを判定できます。

        • ほかのすべての文字は実装に依存した方法でそれ自体に一致します。 これには、名前区切り文字を表す文字も含まれます。

        • ルート・コンポーネントのマッチングは、実装に大きく依存するため、未指定です。

        構文が「regex」である場合は、Patternクラスで定義されているように、パターン・コンポーネントは正規表現になります。

        globおよびregex構文のどちらの場合も、マッチングの詳細(マッチングに大文字小文字の区別があるかどうかなど)は実装に依存しているため、未指定です。

        パラメータ:
        syntaxAndPattern - 構文とパターン
        戻り値:
        パスをそのパターンと照合するために使用できるパス照合プログラム
        例外:
        IllegalArgumentException - パラメータがsyntax: patternの形式を取らない場合
        PatternSyntaxException - パターンが無効な場合
        UnsupportedOperationException - パターンの構文が実装で認識されていない場合
        関連項目:
        Files.newDirectoryStream(Path,String)
      • getUserPrincipalLookupService

        public abstract UserPrincipalLookupService getUserPrincipalLookupService()
        このファイル・システムのUserPrincipalLookupServiceを返します(オプションの操作) 結果となる検索サービスを使用すると、ユーザー名またはグループ名を検索できます。

        使用例: "joe"をファイルの所有者にするとします。

             UserPrincipalLookupService lookupService = FileSystems.getDefault().getUserPrincipalLookupService();
             Files.setOwner(path, lookupService.lookupPrincipalByName("joe"));
         

        戻り値:
        このファイル・システムのUserPrincipalLookupService
        例外:
        UnsupportedOperationException - このFileSystemが検索サービスを備えていない場合
      • newWatchService

        public abstract WatchService newWatchService()
                                              throws IOException
        新しいWatchServiceを構築します(オプションの操作)

        このメソッドは、登録されたオブジェクトの変更およびイベントの監視に使用できる新しい監視サービスを構築します。

        戻り値:
        新しい監視サービス
        例外:
        UnsupportedOperationException - このFileSystemがファイル・システム・オブジェクトの変更およびイベントの監視をサポートしない場合。 この例外は、デフォルト・プロバイダによって作成されたFileSystemsからはスローされません。
        IOException - 入出力エラーが発生した場合