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 雖然 擴展 ,但並非通用,>因為它只支援單一DirectoryStreamIterable;呼叫該方法以獲得第二個或後續迭代器 ,擲出 Iterable。Iterator#iterator iteratorIllegalStateException
</b>
目錄串流 Iterator 的一個重要特性是 Iterator#hasNext() hasNext 其方法至少會提前讀取一個元素。 若 hasNext 方法回傳 true,且後接呼叫該 next 方法,則可保證 next 該方法不會因 I/O 錯誤或串流已發生 #close closed而拋出異常。 它 Iterator 不支持這個 Iterator#remove remove 行動。
DirectoryStream A 在建立時開啟,並透過呼叫close該方法關閉。 關閉目錄串流會釋放與該串流相關的所有資源。 未能關閉串流可能導致資源外洩。 try-with-resources 陳述句提供了一個有用的結構,以確保串流是封閉的:
Path dir = ...
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path entry: stream) {
...
}
}
一旦目錄串流被關閉,使用該目錄 Iterator的後續存取會被視為已到達串流的終點。 由於前讀功能,在目錄串流關閉後,可能會 Iterator 回傳一個或多個元素。 讀取這些緩衝元素後,後續呼叫 hasNext 回傳 false,後續呼叫 next 則拋出 NoSuchElementException。
目錄串流不一定要非 同步關閉。 如果一個執行緒在目錄串流的迭代器中被阻塞,且另一個執行緒呼叫該 close 方法,則第二個執行緒可能會阻塞直到讀取操作完成。
如果在存取目錄時遇到 I/O 錯誤,會導致 IteratorhasNext 的 或 next 方法拋出DirectoryIteratorException,並以 為IOException原因。 如前所述,該 hasNext 方法至少會提前讀取一個元素。 這表示如果 hasNext 方法返回 true,且後接著呼叫該 next 方法,則保證 next 該方法不會在 時 DirectoryIteratorException失敗。
迭代器回傳的元素沒有特定順序。 有些檔案系統會維持與目錄本身及其父目錄的特殊連結。 代表這些連結的條目不會由迭代器回傳。
迭代器是 弱一致性的。 它對執行緒安全,但在迭代過程中不會凍結目錄,因此它可能會(也可能不會)反映目錄建立後 DirectoryStream 的更新。
<b>使用範例:</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 版本中加入。
Java 文件 java.nio.file.DirectoryStream。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
一個用來遍歷目錄中條目的物件。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
| 名稱 | Description |
|---|---|
| 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) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個用來遍歷目錄中條目的物件。 |
| ToEnumerable(IIterable) |
回傳 和 IEnumerable ,會對 Java IIterable進行迭代,允許 |
| ToEnumerable<T>(IIterable) |
回傳 和 IEnumerable<T> ,該 在 Java IIterable上迭代,將每個元素 集結為 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |