2017-01-29 9 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をスローするファイルのリストを完了した。

+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