2017-09-20 5 views
0

フォルダ内のすべてのファイルとそのサブフォルダなどを検索するメソッドを実装したいのですが... 私は再帰によって実装しましたが、何が間違っているのか分かりません。 誰かが私を助けることができますか?私の再帰で何が問題なのですか

private void fileLister(){ 
    File d = new File(adress); 
    File[] existingFiles =d.listFiles(); 
    for(int i = 0;i<existingFiles.length;i++){ 

     if(existingFiles[i].isDirectory()){ 

      fileLister(); 

     } 
     else{ 

      List<File> templist = Arrays.asList(existingFiles); 
       allExsistingFiles.addAll(templist); 
     } 
    } 
} 
+2

「アドレス」は常に同じです... – Fildor

+0

メソッドのパラメータとして 'ファイルd 'を渡します。また、ディレクトリ以外の要素が見つかるたびに配列に 'existingFiles'をすべて追加したくない場合もあります。 'allExsistingFiles.add(existingFiles [i])'だけで十分です。 –

+0

計画どおりに動作するようにするのは簡単な変更です - コードに最小限の変更を加えるだけで、以下の回答を追加しました。それが価値があると思うなら、答えの横にあるチェックマークをクリックしてそれを受け入れて、緑にしてもいいですか?アップ投票もいいです:-) – Assafs

答えて

2

あなたはその呼び出しで作業しているディレクトリを持つように再帰的なメソッドを呼び出すたびにする必要があります。

private void fileLister(File directory){ 
    File[] existingFiles =directory.listFiles(); 
    for(int i = 0;i<existingFiles.length;i++){ 

     if(existingFiles[i].isDirectory()){ 

      fileLister(existinFiles[i]); 

     } 
     else{ 

      List<File> templist = Arrays.asList(existingFiles); 
       allExsistingFiles.addAll(templist); 
     } 
    } 
} 
-1

ITをチェックしてください:

public void showAll(String directoryName, ArrayList<File> files) { 
    File dir = new File(directoryName); 

    File[] fL = dir.listFiles(); 
    for (File file : fL) { 
     if (file.isFile()) { 
      files.add(file); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath(), files); 
     } 
    } 
} 
関連する問題