2014-11-25 38 views
-2

該目錄有n個文件。我正在創建類,它將使用java arraylist按目錄中的大小對文件進行排序。使用java數組列表按大小對文件進行排序

我可以讀取文件名和大小。但如何按大小對文件進行排序?

import java.io.File; 
    import java.io.FilenameFilter; 
    import java.util.ArrayList; 
    import java.util.Arrays; 
    import java.util.Collections; 
    import java.util.Comparator; 

    public class SortingFiles 
    { 
     public static void main(String[] args) 
     { 
      File dir=null; 
      File[] paths; 

      final ArrayList<String> al= new ArrayList<String>(); 


      try{  
       // create new file object 
       dir = new File("D:\\New folder\\New"); 

       // array of files and directory 
       paths = dir.listFiles(); 


       ArrayList<File> fileList = new ArrayList<File>(); 


       for(File file:paths) 
       { 
        // prints filename and directory name 
        System.out.println(file.getName()+" - " +file.length()); 


        al.add(file.getName()); 
} 


     } 
     catch(Exception e) 
     { 
         e.printStackTrace(); 
     } 
    } 

我試圖通過大小

for(int i=1; i<al.size(); i++) 
{ 
     System.out.println("\n Aftr : " +al.get(i)); 
    } 

的文件進行排序,但它無法正常工作。任何一個可以幫助me..I正在嘗試沒有「進口org.apache。 commons.io.FileUtils;」。那麼該怎麼辦 ?

+1

的可能重複[我怎樣才能在Java中的目錄中的文件進行排序?](http://stackoverflow.com/questions/8107001/how-can-i-sort-files-in-a-directory -in-java)&[如何根據名稱,大小和上次修改的順序對目錄列表進行排序?](http://stackoverflow.com/questions/13091517/how-can-i-sort-a-directory-listing -ccording-name-size-last-modified) – OO7 2014-11-25 06:59:13

回答

2

你必須創建一個字符串長的HashMap,然後把鑰匙作爲文件名,長度和值,然後使用自然順序按值排序哈希值。

2

使用(namesizeobjectal然後排序與自定義Comparator(或使這個自定義對象Comparable)使用Collections.sort。喜歡的東西:

public class FileData implements Comparable<FileData> { 
    private final String fileName; 
    private final long fileSize; 

    public FileData(final String fileName, final long fileSize) { 
     this.fileName = fileName; 
     this.fileSize = fileSize; 
    } 

    // getters 

    @Override 
    public String toString() { 
     return (fileName == null ? "" : fileName) + " - " + fileSize; 
    } 

    @Override 
    public int compareTo(FileData other) { 
     return Long.compare(fileSize, other.fileSize); 
    } 
} 

則:

public class SortingFiles 
{ 
    public static void main(String[] args) { 
     // ... 
     final List<FileData> al = new ArrayList<FileData>(); 
     // ... 
     for (final File file: paths) { 
      final FileData fileData = new FileData(file.getName(), file.length()); 
      System.out.println(fileData); 
      al.add(fileData); 
     } 
     // ... 
     Collections.sort(al); 
     // ... 

沒有測試過,甚至沒有編譯(此處鍵入)

+0

我不理解。我應該爲filedata創建一個spearate類嗎?你能解釋一下嗎? – afu 2014-11-25 07:02:20

+0

@AfshanAhamed是的,創建一個單獨的類或[靜態嵌套類](https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) – 2014-11-25 07:17:06

0

我已完成。謝謝你的幫助。

import java.io.File; 
import java.util.ArrayList; 
import java.util.Arrays; 

public class SortingFiles 
{ 
    public static void main(String[] args) 
    { 
     File dir=null; 
     File[] paths; 

     final ArrayList<String> al= new ArrayList<String>(); 


     try{  
      // create new file object 
      dir = new File("D:\\New folder\\New"); 

      // array of files and directory 
      paths = dir.listFiles(); 


      ArrayList<File> fileList = new ArrayList<File>(); 

      class Pair implements Comparable 
      { 
       public long t; 
       public File f; 

       public Pair(File file) 
       { 
        f = file; 
        t = file.length(); 
       } 

       public int compareTo(Object o) 
       { 
        long u = ((Pair) o).t; 
        return t < u ? -1 : t == u ? 0 : 1; 
       } 
      }; 

      Pair[] pairs = new Pair[paths.length]; 
      for (int i = 0; i < paths.length; i++) 
       pairs[i] = new Pair(paths[i]); 

      Arrays.sort(pairs); 

      // Take the sorted pairs and extract only the file part, discarding the timestamp. 
      for (int i = 0; i < paths.length; i++) 
       paths[i] = pairs[i].f; 



      for(File file:paths) 
      { 
       // prints filename and directory name 
       System.out.println(file.getName()+" - " +file.length()); 


       al.add(file.getName()); 
      } 

      //for() 

     } 
     catch(Exception e) 
     { 
      // if any error occurs 
      e.printStackTrace(); 
     } 
    } 
} 
相關問題