2016-04-01 68 views
1

我正在編寫一個代碼,其中有一堆文件必須作爲目錄的輸入。以與目錄中的順序相同的輸入文件

該程序工作正常,但問題出現在文件被挑選的方式。在我的目錄中,當我進行排序時,顯示的第一個文件是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資源管理器中它看起來像下面所示。我已經對文件名進行了排序。

enter image description here

我的控制檯輸出顯示如下。

enter image description here

感謝

+0

爲什麼處理的順序很重要?如果是這樣,那麼文件名稱約定應該反映這一點,以避免在目錄和基於字符串的排序方面的差異,以便明確相同。 – ManoDestra

+0

什麼是您的操作系統,您是什麼意思「在我的目錄中**當我進行排序時**顯示的第一個文件是」? –

+0

文件的順序將由您用來查看它們的軟件(例如Windows上的資源管理器)來決定。您需要使用使用相同邏輯的比較器。 – resueman

回答

1

If your OS is Windows XP or later, your files will be sorted using Numerical File Name Sorting.

既然你要的文件秩序無論是在程序並在文件瀏覽器相匹配,您可以:

  1. 按照以下步驟在鏈接中使用古典文字排序,這將改變文件資源管理器顯示文件的方式。
  2. 創建一個自定義Comparator您傳遞到sort這將整理,基於數的實際值(例如3會來前10,因爲3 < 10)
+0

嗨查拉,我試過了,但仍然沒有變化的結果:( – Rakesh

1

您可以使用的Apache下議院IO到使用多個預定義Comparator S或文件進行排序,甚至使用CompositeFileComparator

這裏結合這是一個例子:

import org.apache.commons.io.comparator.*; 

File dir = new File("."); 
File[] files = dir.listFiles(); 
File[] filesSorted = DefaultFileComparator.DEFAULT_COMPARATOR.sort(files); 
File[] filesReversed = DefaultFileComparator.DEFAULT_REVERSE.sort(files); 

...和here is the list of available comparators

+0

當我這樣做時,它引發了一些錯誤說法類方法比較器' – Rakesh

+0

朋友,我用我試過的代碼更新了我的問題,你可以看看它 – Rakesh

+0

@Rakesh你看到的是詞法排序的結果,使用詞法排序的字符串排序使得A1 diginoise

相關問題