0

名前、最終変更時刻、サイズに従ってディレクトリリストを並べ替える方法を理解しようとしています。Fileメソッドで最後に変更されたファイルの名前、サイズにアクセスできることは知っていますが、並べ替えの方法がわかりません。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです。

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();

    }
}
4

6 に答える 6

3

Comparatorを実装して、言及した属性に基づいてファイルを並べ替え、これを引数としてArrays.sortメソッドに渡す必要があります。

    Arrays.sort(list, new Comparator<File>()
    {
        public int compare(File file1, File file2)
        {
            int result = ...
            .... comparison logic
            return result;
        }
    });
于 2012-10-26T17:26:31.220 に答える
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());

于 2012-10-26T17:32:33.367 に答える
1

Comparatorソートのニーズごとに を作成します。次に、それを使用しComparatorて、特定の .xml 内の File オブジェクトを並べ替えますCollection

http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html

ここでさらに例を確認できます。

http://www.javadeveloper.co.in/java-example/java-comparator-example.html

于 2012-10-26T17:27:06.657 に答える
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(...)次に、メソッドでファイル名、日付、サイズに基づいて比較ロジックを記述します。

于 2012-10-26T17:29:14.987 に答える
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. 
于 2012-10-26T17:41:39.120 に答える
0

このクラスは Comparable インターフェースの実装を示し、 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());
           }

      }

    }
于 2012-10-26T17:53:23.100 に答える