2016-04-11 11 views
0

基本的には、ファイルの場所に移動して、その.txtかどうかを確認します。もしそうなら、私はそのファイルを読んでいます。それが再帰的に持っているディレクトリよりも冗長であれば、それらを繰り返してファイルを出力する必要があります。私は現在、ファイルを一覧表示しようとしています。しかし、私は "互換性のない型を取得し続けます:java.io.File [] javo.io.File"に変換することはできませんが、私はファイルまたはパラメータを介してファイルまたはディレクトリを渡す必要がある収集の。私は、質問が正確に求めていることを理解しているかどうかは分からない。ここでファイルと区別してディレクトリを反復して反復処理するにはどうすればよいですか? (Java)

は質問です:

ファイルは、その名拡張子.txtで終わる個々のファイルである場合は、この方法は、以前のextractIntegersメソッドに各行を渡して、一度にテキスト1行として、その内容をお読みください。名前が.txtで終わらない個々のファイルは単に無視する必要があります。 fileがディレクトリの場合、メソッドはそのファイルとディレクトリ内のすべてのファイルに対して再帰的に自身を呼び出す必要があります。 verboseパラメータがtrueに設定されている場合、このメソッドは、処理する各ファイルとディレクトリの名前も出力する必要があります。

public static void collect(File file, Set<Integer> found, boolean verbose) 
{ 
    String fileName = file.getName(); 
    String extension = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); 
    String fileLine = ""; 
    BufferedReader reader; 
    try{ 
     reader = new BufferedReader(new FileReader(file)); 
     if(extension.equals("txt")) 
     { 
      while((fileLine = reader.readLine()) != null) 
      { 
       extractIntegers(fileLine, found); 
      } 
     } 
     else if(file.isDirectory()) 
     { 
      if(verbose = true) 
      { 
       System.out.println("Directory: " + file.getName()); 
       collect(file.listFiles(), found, true); 
      } 
      else 
      { 
       collect(file.listFiles(), found, false); 
      } 
     } 
    } 
    catch(IOException e) 
    { 
     System.out.print("file/directory not found"); 
    } 
} 
+0

私は、.txtファイルをフィルタリングするために 'SimpleFileVisitor'と' DirectoryStream'を常に使用していました。ここには[例](https://docs.oracle.com/javase/tutorial/essential/io/walk.html)があります。 – Prashant

+0

これは繰り返しの質問です。 http://stackoverflow.com/questions/20987214/recursively-list-all-files-within-a-directory-using-nio-file-directorystream –

答えて

0

file.listFiles()ファイルの配列を返します。あなたのcollect()方法に個別にそれらを渡すために持っている:あなたはファイルの配列を返す引数file.listFiles()で収集呼んでいる

... 
else if(file.isDirectory()) { 
    if (verbose) 
    System.out.println("Directory: " + file.getName()); 
    for (File f : file.listFiles()) 
    collect(f, found, verbose); 
} 
... 
0

。あなたがしたいと思うものは、あなたのファイルの配列内の各ファイルに対して一度だけcollectを呼び出すことです。それを行うために

for (File subFile : file.listFiles()) { 
collect(file.listFiles(), found, true); 
} 

:これで

collect(file.listFiles(), found, true); 

はこれを交換してみてください。ソースコードに表示される両方の場所の間違ったコードを置き換えてください。それが動作しない場合は私に教えてください - 私はもっと調査します。

+0

それは構文的に機能しますが、私が何らかの理由でそれがディレクトリかどうかをチェックすると、常にIOExceptionがキャッチされます。助けてくれてありがとう –

+0

@kyletruong問題ありません。私の答えがあなたを助けてくれたなら、それを答えとしてアップフォートしたり受け入れたりすれば涼しいでしょう。 – nhouser9

関連する問題