2012-10-26 13 views
0

我只是想弄清楚如何根據它的名稱,最後修改時間和大小來對目錄列表進行排序。我知道你可以訪問文件的名稱,大小,最後修改文件的方法,但我不知道如何去排序它。如果有人能指引我朝着正確的方向發展,那就太好了。如何根據名稱,大小和上次修改來對目錄列表進行排序?

public void printDirectoryContents(String path, PrintWriter writer) 
{ 
    File[] list = root.listFiles(); 
    Arrays.sort(list); 

    for (File f : list) 
    {   
     String name = f.getName(); 
     long lastmod = f.lastModified(); 
     SimpleDateFormat simple = new SimpleDateFormat("dd-MMM-yyyy HH:mm"); 
     String formatted = simple.format(new Date(lastmod)); 
     long length = f.length(); 

    } 
} 
+0

請參閱http://docs.oracle.com/javase/tutorial/collections/algorithms/index.html#sorting –

回答

3

你應該實現一個Comparator根據你所提到的屬性對文件進行排序,並通過這個作爲參數傳遞給Arrays.sort方法。

Arrays.sort(list, new Comparator<File>() 
    { 
     public int compare(File file1, File file2) 
     { 
      int result = ... 
      .... comparison logic 
      return result; 
     } 
    }); 
0

而不是Arrays.sort(list);考慮使用這樣的事情:

Arrays.sort(list, new Comparator<File>() { 
     @Override 
     public int compare(File file1, File file2) { 
      //your comparison logic 
      return <your_return_value>; 
     } 

    }); 

然後,您可以繼續前進,寫基於文件名,日期和大小的比較邏輯,採用compare(...)方法d

1

您可以編寫自己的比較

public class FileComparator implements Comparator<File> { 

    //This should sort first by name then last-modified and then size 
    public int compare(File f1, File f2) { 
     int nameComparisonResult = o1.getName().compareTo(o2.getName()); 
     if(nameComparisonResult != 0) return nameComparisonResult; 
     int lModCompResult = Long.valueOf(o1.lastModified()).compareTo(Long.valueOf(o2.lastModified())); 
     if(lModCompResult != 0) return lModCompResult;  
     return Long.valueOf(o1.getTotalSpace()).compareTo(Long.valueOf(o2.getTotalSpace())); 
    } 
} 

,並用它來陣列Arrays.sort(list, new FileComparator());排序。

0

看看Apache Commons IO

你可以找到比較你所有的要求。

有關用法,看有:http://commons.apache.org/io/api-release/org/apache/commons/io/comparator/package-summary.html#package_description

Sorting 
All the compartors include convenience utility sort(File...) and sort(List) methods. 

For example, to sort the files in a directory by name: 
File[] files = dir.listFiles(); 
NameFileComparator.NAME_COMPARATOR.sort(files); 

...alternatively you can do this in one line: 
File[] files = NameFileComparator.NAME_COMPARATOR.sort(dir.listFiles()); 

Composite Comparator 
The CompositeFileComparator can be used to compare (and sort lists or arrays of files) by combining a number other comparators. 
0

這個類會告訴你實現可比的接口,並且根據使用Collections.sort方法文件名列表排序。

package com.roka.tgpl.sms; 



    import java.util.ArrayList; 
    import java.util.Calendar; 
    import java.util.Collections; 

    import java.util.Date; 
    import java.util.List; 




    public class MyFile implements Comparable<MyFile> { 

    private String name; 
    private Date lastModified; 
    private int size; 

    MyFile(String name,Date lastModified,int size){ 
     this.name = name; 
     this.lastModified =lastModified; 
     this.size = size; 
    } 
    /** 
    * @return the name 
    */ 
    public String getName() { 
     return name; 
    } 


    /** 
    * @param name the name to set 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 


    /** 
    * @return the lastModified 
    */ 
    public Date getLastModified() { 
    return lastModified; 
    } 


    /** 
    * @param lastModified the lastModified to set 
    */ 
    public void setLastModified(Date lastModified) { 
     this.lastModified = lastModified; 
    } 


    /** 
    * @return the size 
    */ 
    public int getSize() { 
     return size; 
    } 


    /** 
    * @param size the size to set 
    */ 
    public void setSize(int size) { 
    this.size = size; 
    } 


    public int compareTo(MyFile o) { 

     int compare = this.name.compareTo(o.getName()); 

     return compare; 
    } 



    public static void main(String arg []) { 

     List<MyFile> fileList = new ArrayList<MyFile>(); 
     fileList.add(new MyFile("DCB", Calendar.getInstance().getTime(), 5)); 
     fileList.add(new MyFile("ABC", Calendar.getInstance().getTime(), 15)); 
     Collections.sort(fileList); 

     for(MyFile file : fileList){ 
      System.out.println(file.getName()); 
      } 

     } 

    } 
相關問題