我正在編寫一個代碼,其中有一堆文件必須作爲目錄的輸入。以與目錄中的順序相同的輸入文件
該程序工作正常,但問題出現在文件被挑選的方式。在我的目錄中,當我進行排序時,顯示的第一個文件是file5521.3
,但在我的程序中,拾取的第一個文件是file5521.100
。這很混亂。
我也嘗試過使用Arrays.sort(list, NameFileComparator.NAME_COMPARATOR)
,但它也給出了與前面相同的結果。
以下是我的代碼。
void countFilesInDirectory(File directory, String inputPath) throws IOException {
File[] list = directory.listFiles();
Arrays.sort(list, NameFileComparator.NAME_COMPARATOR);
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
tempPath = inputPath.substring(0, inputPath.lastIndexOf("\\") + 1) + "OP\\";
File outPath = new File(tempPath);
if (!outPath.exists()) {
outPath.mkdir();
}
File temp = new File(tempPath + "temp.txt");
FileOutputStream fos = new FileOutputStream(temp);
if (!temp.exists()) {
temp.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
setStatusText(i);
GenerateFiles(list[i].getAbsoluteFile().toString(), bw);
}
bw.write("</body>");
bw.close();
File newFile = new File(temp.getParent(), "Index.html");
Files.move(temp.toPath(), newFile.toPath());
}
請讓我知道我該怎麼做。
工作方案與上次修改日期
的Comparator
正常工作與上次修改的日期,但是當我嘗試用下面的代碼。結果與以前相同。
Arrays.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.getName().compareTo(o2.getName());
}
});
在我的Windows資源管理器中它看起來像下面所示。我已經對文件名進行了排序。
我的控制檯輸出顯示如下。
感謝
爲什麼處理的順序很重要?如果是這樣,那麼文件名稱約定應該反映這一點,以避免在目錄和基於字符串的排序方面的差異,以便明確相同。 – ManoDestra
什麼是您的操作系統,您是什麼意思「在我的目錄中**當我進行排序時**顯示的第一個文件是」? –
文件的順序將由您用來查看它們的軟件(例如Windows上的資源管理器)來決定。您需要使用使用相同邏輯的比較器。 – resueman