2017-01-29 1 views
-1

폴더를 반복하고 특정 파일이 끝나는 모든 파일을 나열하려고합니다. 재귀 메서드를 사용하여이 문제를 해결하기 위해 노력하고 있지만 어디에도 없습니다.Java 재귀 인쇄 디렉토리 하위 디렉토리 파일

private int counter = 0; 
public void printAllJavaFiles(File directory) { 
     printFile(directory); 
     File[] subDirectories = directory.listFiles(); 

     for (File file : subDirectories) { 
      printAllJavaFiles(file); 
     } 
} 

private void printFile(File file) { 
    // Get file extension 
    String fileExtension = ""; 
    int i = file.getName().lastIndexOf('.'); 
    if (i >= 0) { 
     fileExtension = file.getName().substring(i + 1); 
    } 

    if (fileExtension.equals("java")) { 
     System.out.println("File: " + file.getName() + " Size: " + file.length()); 
    } 
} 

의견이 있으십니까? 나는 디렉토리 구조에서 위아래로가는 방법을 모른다. 그냥 첫 번째 폴더를 입력하고 그것이 그것이 nullpointerexception을 throw 파일을 나열 일을 일단.

+0

당신은'java.nio.file.Files.walkFileTree'을보아야합니다. – rkosegi

+0

재귀 적 방법을 사용하여이 문제를 특별히 해결해야합니다. – Lithicas

+0

NPE는 어디서 구할 수 있습니까? – Sentry

답변

4

File.isDirectory() 메서드를 사용해야합니다. 여기에 방법에

public void printAllJavaFiles(File directory) { 
    if (directory.isDirectory()) { 
     File[] subDirectories = directory.listFiles(); 

     for (File file : subDirectories) { 
      printAllJavaFiles(file); 
     } 
    }else { 
     printFile(directory); 
    } 
} 

문서 :이처럼 https://docs.oracle.com/javase/7/docs/api/java/io/File.html#isDirectory()

아이디어는 모든이 파일에 대해 당신이 폴더 인 경우 만약 그렇다면, 확인 재귀 호출을 할 것입니다. 그렇지 않은 경우 단순히 파일을 인쇄하십시오.

+0

이 두통에서 나를 구 해주셔서 감사합니다. – Lithicas

+1

@Lithicas 도와 드리겠습니다! 이 문제가 해결 된 경우 허용 대답 =]으로 표시하시기 바랍니다. – nhouser9

+0

5 ~ 6 분 남았습니다. – Lithicas