2017-12-24 11 views
0

テキストファイルを表示する単純なディレクトリスキャンで作業していましたが、出力をテキスト領域に出力していました。ここで重複した配列のリスト

public ArrayList<File> getfile(File dir) { 
     File listFile[] = dir.listFiles(); 
     if (listFile != null && listFile.length > 0) { 
      for (int i = 0; i < listFile.length; i++) { 

       if (listFile[i].isDirectory()) { 
        fileList.add(listFile[i]); 
        getfile(listFile[i]); 

       } else { 
        if (listFile[i].getName().endsWith(".txt")) { 
         fileList.add(listFile[i]); 
        } 
       } 

      } 
     } 
     return fileList; 
    } 

私は本当にアイブが行わ知っているいけないonclickのボタンコード

File root = new File(Environment.getExternalStorageDirectory() + File.separator + user_inputfilename); //"searches what the userinput" 
          getfile(root); 
          for (int i = 0; i < fileList.size(); i++) { 
           newText.append(fileList.get(i).getName()+"\n"); 
          } 

さ:公共配列は、どのようにこれまでsomereasonため、私は、以下の再 を、それを使用しようとする場合には、出力を複製しますです違う?配列をクリアする方法はありますか? anyhelpは非常に高く評価されます。ありがとうございます

答えて

1

あなたはサブディレクトリでも再帰的に見えているようですか?いずれにせよ、これを試してください。

public ArrayList<File> getTextFilesRecursively(File dir) { 
    return getTextFilesRecursively(dir, new ArrayList<>()); 
    } 

    private ArrayList<File> getTextFilesRecursively(File dir, ArrayList<File> textFiles) { 
    File[] allFilesAndFoldersInDir = dir.listFiles(); 

    if(textFiles == null) { 
     textFiles = new ArrayList<>(); 
    } 

    if (allFilesAndFoldersInDir != null && allFilesAndFoldersInDir.length > 0) { 
     for (File fileOrFolderInDir : allFilesAndFoldersInDir) { 
     if (fileOrFolderInDir.isDirectory()) { 
      getTextFilesRecursively(fileOrFolderInDir, textFiles); 
     } else if (fileOrFolderInDir.getName().endsWith(".txt")) { 
      textFiles.add(fileOrFolderInDir); 
     } 
     } 
    } 

    return textFiles; 
    } 

を私はfileListは法の外にスコープされ、再利用され、に追加されていたので、あなたの根本的な問題がfileList.add(listFile[i]);だったと信じて:あなたはどこに代わりfileList = getTextFilesRecursively(dir)を行うgetFiles(dir)を呼んでいました。ここではtextFilesを代わりに使用します。このメソッドは、メソッドが最初に呼び出されるたびに空でなければなりません。 getFiles(dir);を呼び出す直前にfileList = new ArrayList<>()を実行するのが簡単な修正ですが、上記のコードははるかに優れています。

+1

このようなドーナツで感謝します。このコードはより良い解決策です。ご協力ありがとうございました。 –

関連する問題