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

インタフェースSecureDirectoryStream<T>

  • すべてのスーパー・インタフェース:
    AutoCloseable, Closeable, DirectoryStream<T>, Iterable<T>


    public interface SecureDirectoryStream<T>
    extends DirectoryStream<T>
    開いたディレクトリから相対的な位置にあるファイルに対する操作を定義するDirectoryStreamです。 SecureDirectoryStreamは、競合のない方法でファイル・ツリーをトラバースしたり、ディレクトリを操作したりする必要のある、洗練されたアプリケーションまたはセキュリティ重視のアプリケーションで使用することを想定しています。 競合状態は、一連のファイル操作を単独で実行できない場合に発生することがあります。 このインタフェースで定義されている各ファイル操作では、相対パスを指定します。 ディレクトリが開いている間に攻撃者によって移動または置換されるかどうかに関係なく、ファイルへのアクセスはすべて、開いているディレクトリを基準に行われます。 SecureDirectoryStreamは、仮想作業ディレクトリとしても使用できます。

    SecureDirectoryStreamには、ベースとなるオペレーティング・システムからの対応するサポートが必要です。 実装がこの機能をサポートしている場合、newDirectoryStreamメソッドによって返されるDirectoryStreamSecureDirectoryStreamとなり、このインタフェースで定義されているメソッドを呼び出すために、その型にキャストされる必要があります。

    デフォルト・プロバイダで、セキュリティ・マネージャが設定されている場合は、指定された相対パスをディレクトリの元のパスに基づいて解決することで得られるパスを使用してアクセス権チェックが行われます(そのディレクトリが開かれてから移動されたかどうかは関係ない)。

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

      • newDirectoryStream

        SecureDirectoryStream<T> newDirectoryStream​(T path,
                                                    LinkOption... options)
                                             throws IOException
        指定されたパスによって識別されるディレクトリを開き、そのディレクトリ内のエントリを反復処理する SecureDirectoryStreamを返します。

        このメソッドは、pathパラメータが絶対パスの場合は、newDirectoryStreamメソッドによって指定されたとおりに機能します。 パラメータが相対パスである場合、開くディレクトリはこの開いているディレクトリからの相対位置にあります。 NOFOLLOW_LINKSオプションを使用すると、ファイルがシンボリック・リンクである場合に必ずこのメソッドが失敗するようにできます。

        新しいディレクトリ・ストリームは、作成後、その作成に使用されたディレクトリ・ストリームには依存しません。 このディレクトリ・ストリームを閉じても、新しく作成したディレクトリ・ストリームには何の影響もありません。

        パラメータ:
        path - 開くディレクトリへのパス
        options - シンボリック・リンクの処理方法を示すオプション
        戻り値:
        新しく開かれたSecureDirectoryStreamオブジェクト
        例外:
        ClosedDirectoryStreamException - ディレクトリ・ストリームが閉じられている場合
        NotDirectoryException - ファイルがディレクトリではないために開けなかった場合(オプションの固有例外)
        IOException - 入出力エラーが発生した場合
        SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkReadメソッドが呼び出されてディレクトリへの読取りアクセスがチェックされます。
      • newByteChannel

        SeekableByteChannel newByteChannel​(T path,
                                           Set<? extends OpenOption> options,
                                           FileAttribute<?>... attrs)
                                    throws IOException
        このディレクトリ内のファイルを開くか作成し、そのファイルにアクセスするためのシーク可能なバイト・チャネルを返します。

        このメソッドは、pathパラメータが絶対パスの場合は、Files.newByteChannelメソッドによって指定されたとおりに機能します。 パラメータが相対パスである場合、開くまたは作成するファイルはこの開いているディレクトリからの相対位置にあります。 Files.newByteChannelメソッドで定義されているオプションのほかに、NOFOLLOW_LINKSオプションを使用して、ファイルがシンボリック・リンクである場合に必ずこのメソッドが失敗するようにすることもできます。

        チャネルは、作成後、その作成に使用されたディレクトリ・ストリームには依存しません。 このディレクトリ・ストリームを閉じても、チャネルには何の影響もありません。

        パラメータ:
        path - 開くまたは作成するファイルのパス
        options - ファイルを開く方法を指定するオプション
        attrs - ファイルの作成時に原子的に設定される属性のオプションのリスト
        戻り値:
        シーク可能なバイト・チャネル
        例外:
        ClosedDirectoryStreamException - ディレクトリ・ストリームが閉じられている場合
        IllegalArgumentException - セットにオプションの無効な組み合わせが含まれる場合
        UnsupportedOperationException - 未サポートのオープン・オプションが指定された場合またはファイルの作成時に原子的に設定できない属性が配列に含まれる場合
        FileAlreadyExistsException - その名前のファイルがすでに存在する場合、およびCREATE_NEWオプションが指定された場合(オプションの固有例外)
        IOException - 入出力エラーが発生した場合
        SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、ファイルが読取り用に開かれるとcheckReadメソッドが呼び出されてパスへの読取りアクセスがチェックされます。 ファイルが書込み用に開かれた場合は、checkWriteメソッドが呼び出されてパスへの書込みアクセスがチェックされます。
      • deleteFile

        void deleteFile​(T path)
                 throws IOException
        ファイルを削除します。

        delete()メソッドとは異なり、このメソッドはファイルがディレクトリかどうかを判断するために最初にファイルを検査しません。 このメソッドによってディレクトリが削除されるかどうかはシステムに依存しているため、未指定です。 ファイルがシンボリック・リンクである場合、そのリンクの最終ターゲットではなく、そのリンク自体が削除されます。 パラメータが相対パスである場合、削除するファイルはこの開いているディレクトリからの相対位置にあります。

        パラメータ:
        path - 削除するファイルのパス
        例外:
        ClosedDirectoryStreamException - ディレクトリ・ストリームが閉じられている場合
        NoSuchFileException - ファイルが存在しない場合(オプションの固有例外)
        IOException - 入出力エラーが発生した場合
        SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkDeleteメソッドが呼び出されてファイルへの削除アクセスがチェックされます。
      • deleteDirectory

        void deleteDirectory​(T path)
                      throws IOException
        ディレクトリを削除します。

        delete()メソッドとは異なり、このメソッドはファイルがディレクトリかどうかを判断するために最初にファイルを検査しません。 このメソッドによってディレクトリ以外のものが削除されるかどうかはシステムに依存しているため、未指定です。 パラメータが相対パスである場合、削除するディレクトリはこの開いているディレクトリからの相対位置にあります。

        パラメータ:
        path - 削除するディレクトリのパス
        例外:
        ClosedDirectoryStreamException - ディレクトリ・ストリームが閉じられている場合
        NoSuchFileException - ディレクトリが存在しない場合(オプションの固有例外)
        DirectoryNotEmptyException - ディレクトリが空でないために削除できなかった場合(オプションの固有例外)
        IOException - 入出力エラーが発生した場合
        SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkDeleteメソッドが呼び出されてディレクトリへの削除アクセスがチェックされます。
      • move

        void move​(T srcpath,
                  SecureDirectoryStream<T> targetdir,
                  T targetpath)
           throws IOException
        このディレクトリからほかのディレクトリにファイルを移動します。

        ATOMIC_MOVEオプションが指定されている場合、このメソッドはmoveメソッドと同様の動作をします。 つまり、このメソッドは原子的なファイル・システム操作としてファイルを移動します。 srcpathパラメータが絶対パスである場合は、ソース・ファイルが検出されます。 パラメータが相対パスである場合、それはこの開いているディレクトリからの相対位置にあります。 targetpathパラメータが絶対である場合は、ターゲット・ファイル(targetdirパラメータは無視される)が検出されます。 パラメータが相対パスである場合、それはtargetdirパラメータで識別される開いているディレクトリからの相対位置にあります。 いずれにしても、ターゲット・ファイルが存在する場合、それが置換されるか、このメソッドが失敗するかは実装に固有です。

        パラメータ:
        srcpath - 移動するファイルの名前
        targetdir - 宛先ディレクトリ
        targetpath - 宛先ディレクトリ内で、そのファイルに指定する名前
        例外:
        ClosedDirectoryStreamException - このディレクトリ・ストリームまたはターゲット・ディレクトリ・ストリームが閉じている場合
        FileAlreadyExistsException - ファイルがターゲット・ディレクトリにすでに存在していて、置き換えられない場合(オプションの固有例外)
        AtomicMoveNotSupportedException - 原子的なファイル・システム操作としてファイルを移動できない場合
        IOException - 入出力エラーが発生した場合
        SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkWriteメソッドが呼び出されてソースおよびターゲット・ファイルの両方への書込みアクセスがチェックされます。
      • getFileAttributeView

        <V extends FileAttributeView> V getFileAttributeView​(Class<V> type)
        このディレクトリのファイル属性にアクセスするための新しいファイル属性ビューを返します。

        結果となるファイル属性ビューを使用すると、この(開いている)ディレクトリの属性を読み取ったり更新したりできます。 typeパラメータは属性ビューの型を指定し、メソッドはサポートされている場合はその型のインスタンスを返します。 このメソッドを呼び出してBasicFileAttributeViewを取得すると、必ずこの開いているディレクトリにバインドされた、そのクラスのインスタンスが返されます。

        結果のファイル属性ビューの状態は、このディレクトリ・ストリームと密接な関係にあります。 ディレクトリ・ストリームがいったん閉じられると、属性を読み取ったり更新したりするメソッドはすべてClosedDirectoryStreamExceptionをスローします。

        型パラメータ:
        V - FileAttributeViewタイプ
        パラメータ:
        type - ファイル属性ビューに対応するClassオブジェクト
        戻り値:
        このディレクトリ・ストリームにバインドされた、指定された型の新しいファイル属性ビュー。その属性ビュー型が利用できない場合はnull
      • getFileAttributeView

        <V extends FileAttributeView> V getFileAttributeView​(T path,
                                                             Class<V> type,
                                                             LinkOption... options)
        このディレクトリ内のファイルのファイル属性にアクセスするための新しいファイル属性ビューを返します。

        結果となるファイル属性ビューを使用すると、このディレクトリ内のファイルの属性を読み取ったり更新したりできます。 typeパラメータは属性ビューの型を指定し、メソッドはサポートされている場合はその型のインスタンスを返します。 このメソッドを呼び出してBasicFileAttributeViewを取得すると、必ずそのディレクトリ内のファイルにバインドされた、そのクラスのインスタンスが返されます。

        結果のファイル属性ビューの状態は、このディレクトリ・ストリームと密接な関係にあります。 ディレクトリ・ストリームがいったん閉じられると、属性を読み取ったり更新したりするメソッドはすべてClosedDirectoryStreamExceptionをスローします。 ファイル属性ビューの作成時にファイルが存在していなくてもかまいませんが、ファイルの属性を読み取ったり更新したりするメソッドは、それが呼び出されたときにファイルが存在しないと失敗します。

        型パラメータ:
        V - FileAttributeViewタイプ
        パラメータ:
        path - ファイルのパス
        type - ファイル属性ビューに対応するClassオブジェクト
        options - シンボリック・リンクの処理方法を示すオプション
        戻り値:
        このディレクトリ・ストリームにバインドされた、指定された型の新しいファイル属性ビュー。その属性ビュー型が利用できない場合はnull