IDirectoryStream インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ディレクトリ内のエントリを反復処理するオブジェクト。
[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<Path> 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<Path> listSourceFiles(Path dir) throws IOException {
List<Path> result = new ArrayList<>();
try (DirectoryStream<Path> 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 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
プロパティ
| 名前 | 説明 |
|---|---|
| Handle |
基になる Android オブジェクトの JNI 値を取得します。 (継承元 IJavaObject) |
| JniIdentityHashCode |
ラップされたインスタンスの |
| JniManagedPeerState |
マネージド ピアの状態。 (継承元 IJavaPeerable) |
| JniObjectReferenceControlBlock |
ディレクトリ内のエントリを反復処理するオブジェクト。 (継承元 IJavaPeerable) |
| JniPeerMembers |
メンバー アクセスと呼び出しのサポート。 (継承元 IJavaPeerable) |
| PeerReference |
ラップされたJava オブジェクト インスタンスのJniObjectReferenceを返します。 (継承元 IJavaPeerable) |
メソッド
| 名前 | 説明 |
|---|---|
| Close() |
このストリームを閉じ、それに関連付けられているすべてのシステム リソースを解放します。 (継承元 ICloseable) |
| Disposed() |
インスタンスが破棄されたときに呼び出されます。 (継承元 IJavaPeerable) |
| DisposeUnlessReferenced() |
このインスタンスへの未処理の参照がない場合は、 |
| Finalized() |
インスタンスが終了したときに呼び出されます。 (継承元 IJavaPeerable) |
| ForEach(IConsumer) |
すべての要素が処理されるか、アクションが例外をスローするまで、 |
| Iterator() |
この |
| SetJniIdentityHashCode(Int32) |
|
| SetJniManagedPeerState(JniManagedPeerStates) |
ディレクトリ内のエントリを反復処理するオブジェクト。 (継承元 IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
|
| Spliterator() |
この |
| UnregisterFromRuntime() |
ランタイムが将来の Java.Interop.JniRuntime+JniValueManager.PeekValue 呼び出しから返されないように、このインスタンスの登録を解除します。 (継承元 IJavaPeerable) |
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
ディレクトリ内のエントリを反復処理するオブジェクト。 |
| ToEnumerable(IIterable) |
Java IIterableを反復処理するIEnumerableを返します。これにより、 |
| ToEnumerable<T>(IIterable) |
Java IIterableを反復処理し、各要素を |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|