2009-04-16 4 views

답변

9

이 코드를 사용하여 폴더의 모든 ZIP 파일을 가져옵니다. 이것을 재귀 적으로 호출하여 파일 객체가 하위 디렉토리가 될지 계속 확인하십시오. 당신은 파일 시스템을 탐색 File에서 모양과 목록() 메소드를 수행하려는 경우

public List<String> getFiles(String folder) { 

List<String> list = new ArrayList<String>(); 
     File dir = new File(folder); 
     if(dir.isDirectory()) { 
      FileFilter filter = new FileFilter() { 

       public boolean accept(File file) { 
        boolean flag = false; 
        if(file.isFile() && !file.isDirectory()) { 
         String filename = file.getName(); 
         if(!filename.endsWith(".zip")) { 
          return true; 
         } 
         return false; 
       } 

      }; 
      File[] fileNames = dir.listFiles(filter); 
      for (File file : fileNames) { 
       list.add(file.getName()); 
      } 
      return list; 

}

+0

왜 File 객체 대신 Strings/파일 이름을 사용하고 있습니까? –

+0

위의 코드 샘플은 내 모듈 중 하나에서 폴더에있는 모든 ZIP 파일의 파일 이름 만 생성해야하므로 String으로 유지하고 웹 서비스에 위생 검사를 전달하는 것이 더 적합합니다. 이로 인해 우리는 발자국을 낮게 유지할 수있었습니다. – sangupta

0

java.io.File 클래스를 사용하여 검색 할 수 있습니다.

2

. 계층 구조를 탐색하는 데 재귀 적 방법이 필요합니다.

1

특정 주제에 대한 자습서 나 책을 모릅니다. 그러나이를 수행하는 방법은 java.io.File 클래스를 사용하는 것입니다. 예를 들어, list()을 사용하여 디렉토리 내용의 목록을 가져올 수 있습니다. 그렇다면 isDirectory()을 사용하고 재귀를 사용하여 전체 파일 트리를 검색하면됩니다.

5

Apache Commons FileUtils (참조 : http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html)와 특히 listFiles 메소드를 사용할 수 있습니다.이 메소드는 재귀 적으로이를 수행하고 필터를 사용합니다. 따라서 재귀를 직접 작성하고 언급 한 검색에 응답 할 수 있습니다.

for (File file : File.listRoots()[0].listFiles()) { 
     System.out.println(file); 
    } 

같은 인쇄 디렉토리 만 :

FileFilter isDirectory = new FileFilter() { 

     public boolean accept(File pathname) { 
      return pathname.isDirectory(); 
     } 
    }; 

    for (File file : File.listRoots()[0].listFiles(isDirectory)) { 
     System.out.println(file); 
    } 
1

나는 Apache Commons VFS을 사용했습니다.

이 같은 디렉토리의 읽고 내용을 위해 그것을 사용하는 것이 좋다 :

FileSystemManager fsManager = VFS.getManager(); 
FileObject path = fsManager.resolveFile("file:///tmp"); 

FileObject[] children = path.getChildren(); 
System.out.println("Children of " + path.getName().getURI()); 
for (int i = 0; i < children.length; i++) 
{ 
    System.out.println(children[ i ].getName().getBaseName()); 
} 

아이들은 파일, 폴더 또는 getType()와 다른 무언가가 있으면 당신은 확인할 수 있습니다.

동일한 코드는 ZIP 또는 JAR 파일, FTP, SFTP 등을 읽는 데 적합합니다. resolveFile URL을 변경하면 as you can see here이됩니다.

관련 문제