2017-08-19 79 views
1

我寫了一段代碼,我打算獲取除目錄名以外的所有文件(.txt,jpg,.png,.pdf)的列表。事實上,代碼應該在每個目錄內部進行爬行並給出文件名。我希望文件以排序方式列出。特定文件夾中文件的排序列表

class CompareFiles implements Comparator<File>{ 

    @Override 
    public int compare(File arg0, File arg1) { 
     return arg0.getName().compareTo(arg1.getName()); 
    } 

} 

類使用它:

public class DirectoryRecursion { 

    public static void check(String path) { 
     File list = new File(path); 
     File[] listOfFile = list.listFiles(); 
     ArrayList<File> asf = new ArrayList<File>(); 
     for(File file: listOfFile){ 
      if(file.isDirectory()) 
       check(file.getAbsolutePath()); 
      else    { 
       asf.add(file);     
      } 
     } 
     System.out.println("Before: "); 
     for(File file: asf) 
      System.out.println("File: " + file.getName()); 

     Collections.sort(asf, new CompareFiles()); 
     System.out.println("Before: "); 
     for(File file: asf) 
      System.out.println("File: " + file.getName());   
    } 
} 

但不幸的是輸出兩個「之前」和「之後」是類似的。

+0

可能你可以分享預期和實際產出的樣本,並提供輸入。 – nullpointer

+0

除了你的System.out.println()之後的排序 - 應該說System.out.println(「After:」) - 而不是「之前」,這應該工作... – user681574

+0

哎呀第二秒之前是應該是「之後」,但我的代碼沒有按要求工作。 – Shailja

回答

0

樣本輸出以區分它基於自定義比較CompareFiles而言似乎只是罰款:

Before: File: a.bmp File: a.JPG File: b.txt File: c.bmp File: d.txt 
After: File: a.JPG File: a.bmp File: b.txt File: c.bmp File: d.txt 

只是爲了證明它的字符串a.JPGlexicographically greater than the string argumenta.bmp

+0

爲了避免這種行爲,你可以使用compareToIgnoreCase方法代替compareTo – Syroezhkin

+0

@Syroezhkin我堅信,那不是OP的意圖。 – nullpointer

相關問題