Language

IDirectoryStream インターフェイス

定義

ディレクトリ内のエントリを反復処理するオブジェクト。

[Android.Runtime.Register("java/nio/file/DirectoryStream", "", "Java.Nio.FileNio.IDirectoryStreamInvoker", ApiSince=26)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface IDirectoryStream : IDisposable, Java.Interop.IJavaPeerable, Java.IO.ICloseable, Java.Lang.IIterable
[<Android.Runtime.Register("java/nio/file/DirectoryStream", "", "Java.Nio.FileNio.IDirectoryStreamInvoker", ApiSince=26)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type IDirectoryStream = interface
    interface ICloseable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface IIterable
派生
属性
実装

注釈

ディレクトリ内のエントリを反復処理するオブジェクト。 ディレクトリ ストリームを使用すると、for-each コンストラクトを使用してディレクトリを反復処理できます。

<b>DirectoryStreamはIterable拡張されますが、1 つのIterableのみをサポートするため、汎用Iteratorではありません。#iterator iterator メソッドを呼び出して 2 番目以降の反復子を取得すると、IllegalStateExceptionがスローされます。 </b>

ディレクトリ ストリームの Iterator の重要なプロパティは、その Iterator#hasNext() hasNext メソッドが少なくとも 1 つの要素で先読みすることが保証されていることです。 hasNextメソッドがtrueを返し、その後に next メソッドの呼び出しが続く場合、next メソッドが I/O エラーのため、またはストリームが#close closedされたために例外がスローされないことが保証されます。 Iteratorは、Iterator#remove remove操作をサポートしていません。

DirectoryStreamは作成時に開き、close メソッドを呼び出すことによって閉じられます。 ディレクトリ ストリームを閉じると、ストリームに関連付けられているすべてのリソースが解放されます。 ストリームを閉じられなかった場合、リソース リークが発生する可能性があります。 try-with-resources ステートメントは、ストリームが閉じられるようにするのに役立つコンストラクトを提供します。

Path dir = ...
              try (DirectoryStream&lt;Path&gt; stream = Files.newDirectoryStream(dir)) {
                  for (Path entry: stream) {
                      ...
                  }
              }

ディレクトリ ストリームが閉じられると、 Iteratorを使用してディレクトリにさらにアクセスすると、ストリームの末尾に到達したかのように動作します。 先行読み取りのため、 Iterator は、ディレクトリ ストリームが閉じられた後に 1 つ以上の要素を返す場合があります。 これらのバッファーされた要素が読み取られた後、 hasNext メソッドの後続の呼び出しは falseを返し、 next メソッドの後続の呼び出しは NoSuchElementExceptionをスローします。

ディレクトリ ストリームを 非同期的に閉じる必要はありません。 ディレクトリ ストリームの反復子によるディレクトリからの読み取りでスレッドがブロックされ、別のスレッドが close メソッドを呼び出す場合、読み取り操作が完了するまで 2 番目のスレッドがブロックされる可能性があります。

ディレクトリにアクセスするときに I/O エラーが発生した場合、IteratorのhasNextまたはnextメソッドは、DirectoryIteratorExceptionを原因としてIOExceptionをスローします。 前述のように、 hasNext メソッドは、少なくとも 1 つの要素で先読みすることが保証されます。 つまり、 hasNext メソッドが trueを返し、その後に next メソッドの呼び出しが続く場合、 next メソッドが DirectoryIteratorExceptionで失敗しないことが保証されます。

反復子によって返される要素は、特定の順序にありません。 一部のファイル システムでは、ディレクトリ自体とディレクトリの親ディレクトリへの特別なリンクが保持されます。 これらのリンクを表すエントリは、反復子によって返されません。

反復子の 整合性が弱い。 スレッド セーフですが、反復処理中はディレクトリがフリーズしないため、 DirectoryStream の作成後に発生するディレクトリの更新が反映される場合があります (または反映されない場合もあります)。

<b>Usage Examples:</b> ディレクトリ内のソース ファイルの一覧が必要だとします。 この例では、for-each と try-with-resources の両方のコンストラクトを使用します。

List&lt;Path&gt; listSourceFiles(Path dir) throws IOException {
                  List&lt;Path&gt; result = new ArrayList&lt;&gt;();
                  try (DirectoryStream&lt;Path&gt; stream = Files.newDirectoryStream(dir, "*.{c,h,cpp,hpp,java}")) {
                      for (Path entry: stream) {
                          result.add(entry);
                      }
                  } catch (DirectoryIteratorException ex) {
                      // I/O error encounted during the iteration, the cause is an IOException
                      throw ex.getCause();
                  }
                  return result;
              }

1.7 で追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

プロパティ

名前 説明
Handle

基になる Android オブジェクトの JNI 値を取得します。

(継承元 IJavaObject)
JniIdentityHashCode

ラップされたインスタンスの java.lang.System.identityHashCode() の値を返します。

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniObjectReferenceControlBlock

ディレクトリ内のエントリを反復処理するオブジェクト。

(継承元 IJavaPeerable)
JniPeerMembers

メンバー アクセスと呼び出しのサポート。

(継承元 IJavaPeerable)
PeerReference

ラップされたJava オブジェクト インスタンスのJniObjectReferenceを返します。

(継承元 IJavaPeerable)

メソッド

名前 説明
Close()

このストリームを閉じ、それに関連付けられているすべてのシステム リソースを解放します。

(継承元 ICloseable)
Disposed()

インスタンスが破棄されたときに呼び出されます。

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

このインスタンスへの未処理の参照がない場合は、 Dispose()を呼び出します。それ以外の場合は何も実行しません。

(継承元 IJavaPeerable)
Finalized()

インスタンスが終了したときに呼び出されます。

(継承元 IJavaPeerable)
ForEach(IConsumer)

すべての要素が処理されるか、アクションが例外をスローするまで、 Iterable の各要素に対して指定されたアクションを実行します。

(継承元 IIterable)
Iterator()

この DirectoryStreamに関連付けられている反復子を返します。

SetJniIdentityHashCode(Int32)

JniIdentityHashCodeによって返される値を設定します。

(継承元 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

ディレクトリ内のエントリを反復処理するオブジェクト。

(継承元 IJavaPeerable)
SetPeerReference(JniObjectReference)

PeerReferenceによって返される値を設定します。

(継承元 IJavaPeerable)
Spliterator()

このSpliteratorで説明されている要素に対してIterableを作成します。

(継承元 IIterable)
UnregisterFromRuntime()

ランタイムが将来の Java.Interop.JniRuntime+JniValueManager.PeekValue 呼び出しから返されないように、このインスタンスの登録を解除します。

(継承元 IJavaPeerable)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

ディレクトリ内のエントリを反復処理するオブジェクト。

ToEnumerable(IIterable)

Java IIterableを反復処理するIEnumerableを返します。これにより、foreachと LINQ をJavaコレクション型で使用できます。 各要素は、Java インスタンスから対応するマネージド型にマーシャリングされます。

ToEnumerable<T>(IIterable)

Java IIterableを反復処理し、各要素をTにマーシャリングするIEnumerable<T>を返します。 これにより、foreachと LINQ をJavaコレクション型で使用できます。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象