簡體   English   中英

Java File.list() 順序一致?

[英]Java File.list() consistent order?

這是一個可怕的問題(在我看來),我已經盡力找到自己有用的文檔,但運氣不佳 - 無論如何,這里是:

我有代碼需要對目錄中的所有文件進行一些操作。 我在文件object 中設置目錄,並使用 fileObject.list() 遍歷目錄中的文件。 我讓這段代碼在一夜之間運行,它(經過多次調整)在某個時候崩潰了。 我試圖弄清楚這發生在什么時候(是的,我的日志記錄很糟糕)。 現在,根據這個javadoc ,列出文件時不能保證順序(字母順序或其他順序),我想知道是否有任何一致性保證? 這意味着當我兩次運行相同的代碼時,我會得到完全相同的文件順序嗎? 邏輯告訴我應該這樣做,我已經基於此恢復了操作,但我對此表示懷疑。 另外,我很好奇 javadoc 中的“沒有特定順序意味着什么”。

該語言意味着您不應依賴訂單的任何屬性,包括從運行到運行的一致性。

如果在某些內存數據結構中存在文件的鏈接列表,驅動程序可能會將最近訪問的文件移動到列表的前面,以優化重復文件訪問。 即使沒有文件被修改,這也可能會更改列出文件的順序。

如果你想要一個一致的順序,你可以做類似的事情

Arrays.sort(
   myFileArray,
   new Comparator<File>() {
     public int compare(File a, File b) {
       return a.getName().compareTo(b.getName());
     }
   });

鑒於您正在查看的文件在兩次調用之間沒有變化,並且您在完全相同的平台上運行它們兩次,我認為您會得到相同的結果。

無法保證順序,但 AFAIK 沒有“不一致的保證”,因此調用兩次,鑒於沒有文件被更改或以任何方式觸及,可能會給您相同的順序。 但是,如果你正在“處理”它們,它們可能已經被觸動了。

不過,出於理智考慮,如果您要依賴一致性,我建議您在獲得它們時對它們進行排序。

正如文檔所說,您不能期望對文件進行任何排序。 特別是,兩個后續調用可以返回不同的排序。 如果您需要特定的順序,例如按字母順序,您需要自己對列表進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM