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

クラスFileSystems


  • public final class FileSystems
    extends Object
    ファイル・システム用のファクトリ・メソッドです。 このクラスは、デフォルトのファイル・システムおよびファクトリ・メソッドを取得してほかの種類のファイル・システムを構築するためのgetDefaultメソッドを定義します。

    このクラスで定義されているどのメソッドの最初の呼出しでも、デフォルト・プロバイダがロードされます。 デフォルト・プロバイダ(URIスキームfileで識別される)は、Java仮想マシンからアクセス可能なファイル・システムへのアクセスを提供するFileSystemを作成します。 デフォルト・プロバイダのロードまたは初期化の処理が失敗すると、未指定のエラーがスローされます。

    このクラスで定義されている newFileSystemメソッドの呼出しによるinstalledProvidersメソッドの最初の呼出しでは、インストールされているすべてのファイル・システム・プロバイダの検索とロードが行われます。 インストールされているプロバイダのロードには、ServiceLoaderクラスで定義されているサービス・プロバイダのロード機能が使用されます。 インストールされているプロバイダのロードにはシステム・クラス・ローダーが使用されます。 システム・クラス・ローダーが見つからない場合、プラットフォーム・クラス・ローダーが使用されます。 プロバイダは通常、アプリケーション・クラス・パス上のJARファイルに配置されてインストールされ、JARファイルにはリソース・ディレクトリMETA-INF/servicesjava.nio.file.spi.FileSystemProviderという名前のプロバイダ構成ファイルが含まれ、FileSystemProviderの具象サブクラスの完全修飾名が1つ以上リストされますそれらは引数なしのコンストラクタを持ちます。 インストールされているプロバイダの検索順序は実装によって異なります。 プロバイダがインスタンス化され、そのgetSchemeによって、以前インスタンス化されたプロバイダと同じURIスキームのプロバイダが返される場合は、最後にインスタンス化された重複するプロバイダが破棄されます。 URIスキームは大文字小文字に関係なく比較されます。 構築中、プロバイダはデフォルト・プロバイダに関連付けられたファイルに安全にアクセスできますが、インストールされたほかのプロバイダの循環ロードを避けるために注意が必要です。 インストールされたプロバイダの循環ロードが検出された場合は、未指定のエラーがスローされます。

    このクラスでは、プロバイダの検索時にClassLoaderを指定できるようにするファクトリ・メソッドも定義します。 インストールされているプロバイダと同様に、プロバイダ・クラスも、プロバイダ構成ファイルをリソース・ディレクトリMETA-INF/services内に配置することで識別されます。

    あるスレッドがインストールされているファイル・システム・プロバイダのロードを開始しているときに、別のスレッドが同様にそれらのプロバイダのロードを試みるメソッドを呼び出した場合、最初のロードが完了するまでそのメソッドはブロックされます。

    導入されたバージョン:
    1.7
    • メソッドの詳細

      • getDefault

        public static FileSystem getDefault()
        デフォルトのFileSystemを返します。 デフォルトのファイル・システムは、Java仮想マシンからアクセス可能なファイル・システムへのアクセスを提供するオブジェクトを作成します。 そのファイル・システムの作業ディレクトリは、システム・プロパティuser.dirによって指定された現在のユーザー・ディレクトリです。 これにより、java.io.Fileクラスとの相互運用性が確保されます。

        このクラスで定義されているどのメソッドの最初の呼出しでも、デフォルト・プロバイダ・オブジェクトが検索されます。 システム・プロパティjava.nio.file.spi.DefaultFileSystemProviderが定義されていない場合は、デフォルトのファイル・システムを作成するために呼び出されるシステムのデフォルト・プロバイダがデフォルト・プロバイダになります。

        システム・プロパティjava.nio.file.spi.DefaultFileSystemProviderが定義されている場合は、それがURIスキーム"file"で識別される具象プロバイダ・クラスの1つまたは複数の完全修飾名のリストとみなされます。 そのプロパティが複数の名前のリストである場合、それらの名前はカンマで区切られています。 各クラスは、システム・クラス・ローダーを使ってロードされ、1つの引数をとるコンストラクタ(その仮パラメータ型はFileSystemProvider)を呼び出してインスタンス化されます。 プロバイダは、そのプロパティに指定されている順序でロードおよびインスタンス化されます。 このプロセスが失敗するか、プロバイダのスキームが"file"に等しくない場合は、未指定のエラーがスローされます。 URIスキームは通常、大文字小文字に関係なく比較されますが、このスキームは"file"である必要があります。 最初のプロバイダ・クラスをインスタンス化するには、システムのデフォルト・プロバイダへの参照を使ってそれを呼び出します。 2番目のプロバイダ・クラスをインスタンス化するには、最初のプロバイダ・インスタンスへの参照を使ってそれを呼び出します。 3番目のプロバイダ・クラスをインスタンス化するには、2番目のプロバイダ・インスタンスへの参照を使ってそれを呼び出し、それ以降も同様です。 インスタンス化される最後のプロバイダがデフォルト・プロバイダになります。つまり、その getFileSystemメソッドがURI "file:///"を使って呼び出されて、デフォルトのファイル・システムへの参照が取得されます。

        このメソッドの以降の呼出しでも、最初の呼出しで返されたファイル・システムが返されます。

        戻り値:
        デフォルトのファイル・システム
      • getFileSystem

        public static FileSystem getFileSystem​(URI uri)
        既存のFileSystemへの参照を返します。

        このメソッドは、インストールされているプロバイダを反復して、指定されたURIのURI スキームで識別されるプロバイダを検索します。 URIスキームは大文字小文字に関係なく比較されます。 URIの正確な形式はプロバイダに大きく依存します。 見つかった場合は、そのプロバイダのgetFileSystemメソッドが呼び出されて FileSystemへの参照が取得されます。

        このプロバイダによって作成されたファイル・システムが閉じると、このメソッドが、閉じられたファイル・システムへの参照を返すかFileSystemNotFoundExceptionをスローするかは、プロバイダによって異なります。 以前に作成したファイル・システムと同じURIで新しいファイル・システムを作成することをプロバイダが許可する場合は、ファイル・システムが閉じられたあとで(かつnewFileSystemメソッドによって新しいインスタンスが作成される前に)このメソッドを呼び出すと、例外がスローされます。

        セキュリティ・マネージャがインストールされている場合は、プロバイダ実装は既存のファイル・システムへの参照を返す前にアクセス権をチェックすることを必要とする場合があります。 デフォルト・ファイル・システムの場合は、アクセス権のチェックは不要です。

        パラメータ:
        uri - ファイル・システムを検索するURI
        戻り値:
        ファイル・システムへの参照
        例外:
        IllegalArgumentException - uriパラメータの事前条件が満たされない場合
        FileSystemNotFoundException - そのファイル・システム(URIによって識別される)が存在しない場合
        ProviderNotFoundException - URIスキームをサポートするプロバイダがインストールされていない場合
        SecurityException - セキュリティ・マネージャがインストールされ、それが未指定のアクセス権を拒否する場合
      • newFileSystem

        public static FileSystem newFileSystem​(URI uri,
                                               Map<String,​?> env)
                                        throws IOException
        URIによって識別される新しいファイル・システムを構築します。

        このメソッドは、インストールされているプロバイダを反復して、指定されたURIのURI スキームで識別されるプロバイダを検索します。 URIスキームは大文字小文字に関係なく比較されます。 URIの正確な形式はプロバイダに大きく依存します。 見つかった場合は、そのプロバイダのnewFileSystem(URI,Map)メソッドが呼び出されて新しいファイル・システムが構築されます。

        ファイル・システムが閉じられると、以前に作成したファイル・システムと同じURIで新しいファイル・システムを作成することをプロバイダが許可するかどうかはプロバイダによって異なります。

        使用例: スキーム"memory"で識別されるプロバイダがインストールされているとします。

           Map<String,String> env = new HashMap<>();
           env.put("capacity", "16G");
           env.put("blockSize", "4k");
           FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"), env);
         

        パラメータ:
        uri - ファイル・システムを識別するURI
        env - ファイル・システムを構成するためのプロバイダ固有のプロパティのマップ。空でも可
        戻り値:
        新しいファイル・システム
        例外:
        IllegalArgumentException - uriパラメータの事前条件が満たされない場合、またはenvパラメータにプロバイダが必要とするプロパティが含まれない場合、またはプロパティ値が無効な場合
        FileSystemAlreadyExistsException - そのファイル・システムがすでに作成されている場合
        ProviderNotFoundException - URIスキームをサポートするプロバイダがインストールされていない場合
        IOException - そのファイル・システムの作成時に入出力エラーが発生した場合
        SecurityException - セキュリティ・マネージャがインストールされ、それがファイル・システム・プロバイダ実装によって必要とされる未指定のアクセス権を拒否する場合
      • newFileSystem

        public static FileSystem newFileSystem​(URI uri,
                                               Map<String,​?> env,
                                               ClassLoader loader)
                                        throws IOException
        URIによって識別される新しいファイル・システムを構築します。

        このメソッドは最初に、newFileSystem(URI,Map)メソッドとまったく同じ方法でインストールされているプロバイダの検索を試みます。 インストールされているプロバイダの中にそのURIスキームをサポートするものが1つも存在しない場合は、指定されたクラス・ローダーを使用してプロバイダの検索を試みます。 そのURIスキームをサポートするプロバイダが見つかった場合は、そのnewFileSystem(URI,Map)が呼び出されて、新しいファイル・システムが構築されます。

        パラメータ:
        uri - ファイル・システムを識別するURI
        env - ファイル・システムを構成するためのプロバイダ固有のプロパティのマップ。空でも可
        loader - プロバイダを検索するためのクラス・ローダー。インストールされたプロバイダを検索するのみの場合はnull
        戻り値:
        新しいファイル・システム
        例外:
        IllegalArgumentException - uriパラメータの事前条件が満たされない場合、またはenvパラメータにプロバイダが必要とするプロパティが含まれない場合、またはプロパティ値が無効な場合
        FileSystemAlreadyExistsException - URIスキームによって、インストールされているプロバイダが識別されたが、そのファイル・システムがすでに作成されている場合
        ProviderNotFoundException - URIスキームをサポートするプロバイダが見つからない場合
        ServiceConfigurationError - サービス・プロバイダのロード中にエラーが発生した場合
        IOException - そのファイル・システムの作成時に入出力エラーが発生した場合
        SecurityException - セキュリティ・マネージャがインストールされ、それがファイル・システム・プロバイダ実装によって必要とされる未指定のアクセス権を拒否する場合
      • newFileSystem

        public static FileSystem newFileSystem​(Path path,
                                               ClassLoader loader)
                                        throws IOException
        ファイルの内容にファイル・システムとしてアクセスする新しいFileSystemを構築します。

        このメソッドは、1つまたは複数のファイルの内容がファイル・システムとして扱われる擬似ファイル・システムを作成する特別なプロバイダを使用します。

        このメソッドは、インストールされているプロバイダを反復処理します。 順々に、各プロバイダのnewFileSystem(Path,Map)メソッドを空のマップで呼び出します。 プロバイダがファイル・システムを返す場合は、反復処理が終了して、そのファイル・システムが返されます。 インストールされているプロバイダの中にそのFileSystemを返すものが1つも存在しない場合は、指定されたクラス・ローダーを使用してプロバイダの検索を試みます。 プロバイダがファイル・システムを返す場合は、検索処理が終了して、そのファイル・システムが返されます。

        パラメータ:
        path - ファイルへのパス
        loader - プロバイダを検索するためのクラス・ローダー。インストールされたプロバイダを検索するのみの場合はnull
        戻り値:
        新しいファイル・システム
        例外:
        ProviderNotFoundException - このファイル・タイプをサポートするプロバイダが見つからない場合
        ServiceConfigurationError - サービス・プロバイダのロード中にエラーが発生した場合
        IOException - 入出力エラーが発生した場合
        SecurityException - セキュリティ・マネージャがインストールされ、それが未指定のアクセス権を拒否する場合