2014-11-25 39 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(); 
     } 
    } 
} 
相关问题