語言

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 雖然 擴展 ,但並非通用,>因為它只支援單一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&lt;Path&gt; 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&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 文件 java.nio.file.DirectoryStream。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

屬性

名稱 Description
Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

一個用來遍歷目錄中條目的物件。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
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描述的元素上建立 a Iterable 。

(繼承來源 IIterable)
UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一個用來遍歷目錄中條目的物件。

ToEnumerable(IIterable)

回傳 和 IEnumerable ,會對 Java IIterable進行迭代,允許 foreach 和 LINQ 與 Java 集合類型一起使用。 每個元素都會從其 Java 實例編組到對應的受管理型別。

ToEnumerable<T>(IIterable)

回傳 和 IEnumerable<T> ,該 在 Java IIterable上迭代,將每個元素 集結為 T。 這使得 foreach LINQ 可以搭配 Java 集合類型一起使用。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於