2016-11-20 4 views
0

私が達成しようとしているのは、基本的に、ユーザのコンピュータ上の特定のディレクトリを調べるディレクトリで、特定の単語(この場合は電子メール) )、最後にそれらを印刷します。ディレクトリ内の複数のファイルを読み取って特定のコンテンツを印刷する

現在の私のスクリプトは、特定のディレクトリ内のすべてのファイルを検索し、それらのファイル名を出力します。それと同様に、私は特定の単語のための1つのファイルを通してそのスクリプトを検索させ、それを印刷する方法も考え出しました。唯一の問題は、その1つのファイルを検索してその単語/句を取得しても、完全なディレクトリとファイルを指定する必要があることです。私はそれが特定のディレクトリを持って、その中のすべてのファイルを検索したいだけです。私はすべてのファイルを見つけるために作成したディレクトリ変数を使用してこれを試みましたが、単語を見つけるためにファイルを検索するためのディレクトリとしてそのディレクトリを使用すると動作しません。

ここでは、私のコードの一部であり、私が望む機能のために使用されています。実際の関数は私の実際のスクリプトで呼び出されますので、それが動作しているとして心配しないでください。私はスクリプトの中で、どこで働きたいのかをコメントしました。

package aProject; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

public class aScanner { 

    static String usernameMac = System.getProperty("user.name"); 
    final static File foldersMac = new File("/Users/" + usernameMac + "/Library/Mail/V2"); // this is the right directory I want to look through 

    public static void listFilesForFolder(final File foldersMac) { 
     for (final File fileEntry : foldersMac.listFiles()) { 

      if (fileEntry.isDirectory()) { 
       listFilesForFolder(fileEntry); 

       try { 
        BufferedReader bReaderM = new BufferedReader(new FileReader("/Users/username/Library/Mail/V2/AosIMAP-/INBOX.mbox/longnumber-folder/Data/Messages/1.emlx")); //this is where I would like the foldersMac variable to work in, instead of this full directory 
        String lineMe; 
        while((lineMe = bReaderM.readLine()) != null) 
        { 
         if(lineMe.contains(".com")) 
          System.out.println(lineMe); 
        } 
        bReaderM.close(); 
       } 
       catch (IOException e) { 

       } 

      } else { 
       System.out.println(fileEntry.getName()); 

      } 

     } 
    } 

    } 
+1

AZのIOExceptionまたはその他の行動があった場合には、そのリーダーを閉じることを忘れないでください。むしろ、.close()メソッドをfinallyブロックの中に配置したいと思います。 – JSONStatham

答えて

0

私は、これはあなたが達成しようとしているものだと思う:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 

public class aScanner { 

    static String usernameMac = System.getProperty("user.name"); 
    final static File foldersMac = new File("/Users/" + usernameMac + "/Library/Mail/V2"); 

    public static void main(String[] args) throws IOException { 
     listFilesForFolder(foldersMac); 
    } 

    public static void listFilesForFolder(final File foldersMac) throws IOException { 
     for (final File fileEntry : foldersMac.listFiles()) { 
      if (fileEntry.isDirectory()) { 
       listFilesForFolder(fileEntry); 
      } else { 
       ArrayList<String> lines = new ArrayList<>(); 
       try (BufferedReader bReaderM = new BufferedReader(new FileReader(fileEntry))) { 
        String lineMe; 
        while ((lineMe = bReaderM.readLine()) != null) { 
         if (lineMe.contains(".com")) { 
          lines.add(lineMe); 
         } 
        } 
       } 
       if (!lines.isEmpty()) { 
        System.out.println(fileEntry.getAbsolutePath() + ":"); 
        for (String line : lines) { 
         System.out.println(" " + line.trim()); 
        } 
       } 
      } 
     } 
    } 
} 
+0

私はコードを書く時間を割いていただきありがとうございます、私は自分のコードに実装しようとしました。しかし、それは私にエラーの束を与えている、私はもちろん、私はやったすべてのプラグインをインポートする必要があります知っている。しかし、それはまだ私に修正できないさまざまなエラーを与えています。コードをhttps://www.compilejava.net/に置くと、エラーも発生します。これは私がEclipseで得たエラーの1つです。型ArrayList ' –

+0

をインスタンス化できません。必要なインポートを編集して追加しました。サンドボックスはシステムプロパティやファイルシステムへのアクセスを許可しないため、compilejava.netでは実行されませんが、コンパイルされます。 – teppic

0

私はあなたがディレクトリ構造に再帰的にダウンし、あなたがあなたのツリーを歩くが、文場合は、このの何も原因を書き出す 、あなたの問題はあなたの再帰ロジックの周りにあると思う:

if (fileEntry.isDirectory()) { 
       listFilesForFolder(fileEntry); 

... 
} 

前のifステートメントを閉じると、うまくいきます。

+0

あなたが今思うように私はそれを変更しましたが、変更された唯一のものです。それは今ではそれがすでに行ったファイルの名前だけを出力しますが、実際の内容は表示しません。 –

関連する問題