2014-11-25 4 views
-2

디렉토리에는 n 개의 파일이 있습니다. 클래스를 생성하면 java arraylist를 사용하여 디렉토리에서 크기별로 파일을 정렬합니다.자바 배열 목록을 사용하여 크기별로 디렉토리에서 파일 정렬

파일 이름과 크기를 읽을 수 있습니다. 크기에 따라 파일을 정렬하는 방법은 무엇입니까?

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

의 사용 가능한 복제 [I 자바의 디렉토리에있는 파일을 정렬 할 수 있는가? (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 -according-to-name-size-and-last-modified) – OO7

답변

2

(여기 입력) 그런 다음 자연 순서를 사용하여 해시 맵을 값순으로 정렬합니다.

2

사용하여 다음 종류의 사용자 정의 Comparatoral에서 (name, size) object (또는이 사용자 지정 개체 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

+0

@AfshanAhamed 예, 별도의 클래스 또는 [정적 중첩 클래스] (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)를 만듭니다. –

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(); 
     } 
    } 
} 
관련 문제