2016-11-22 6 views
0

以下のコードを見て、このコードはディレクトリを探して、すべての異なるファイル名を出力します。今私の質問は、どのように私は自分のコードを変更しようとするので、それはまた、それが発見/ファイル内のすべてのコンテンツを印刷するだろうか?例えば、コードがディレクトリ内の3つのファイルを見つけたとすると、それらの3つのファイル内のすべてのコンテンツが出力されます。ディレクトリ内の複数のファイルからすべての内容を印刷します

import java.io.File; 
import java.io.IOException; 

public class EScan { 


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

public static void main(String[] args) throws IOException { 

    listFilesForFolder(foldersPc); 

} 

public static void listFilesForFolder(final File foldersPc) throws IOException { 
    for (final File fileEntry : foldersPc.listFiles()) { 
     if (fileEntry.isDirectory()) { 
      listFilesForFolder(fileEntry); 
     } else { 
      System.out.println(fileEntry.getName()); 
     } 
    } 
} 

} 

答えて

0

あなたは、私が投稿する前にそれをテストしたファイル

try { 
     Scanner sc = new Scanner(fileEntry); 

     while (sc.hasNextLine()) { 
      String s = sc.nextLine(); 
      System.out.println(s); 
     } 

     sc.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
} 
+0

コードに感謝します。これをコードに追加するにはどうすればよいでしょうか? – fsharpsquare

+0

私はちょうどそれをテストしました、私はそれをelse文の中に入れました、そして、それは働いているようです!どうもありがとうございました。あなたの手に時間がある場合は、ファイル内に電子メールを印刷させる方法しかないかどうかを知っていますか?そうすれば、.comや@を含む単語が見つかると、その単語が印刷されますか? – fsharpsquare

+0

正規表現を使用して、文字列が有効な電子メールであるかどうかを最初に検証できます。 http://stackoverflow.com/questions/8204680/java-regex-email –

1

の内容を読み取るためにスキャナを使用することができます。それは働いている。

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* @author EdwinAdeola 
*/ 
public class TestPrintAllFiles { 

    public static void main(String[] args) { 
     //Accessing the folder path 
     File myFolder = new File("C:\\Intel"); 
     File[] listOfFiles = myFolder.listFiles(); 
     String fileName, line = null; 
     BufferedReader br; 
     //For each loop to print the content of each file 
     for (File eachFile : listOfFiles) { 
      if (eachFile.isFile()) { 
       try { 
        //System.out.println(eachFile.getName()); 
        fileName = eachFile.getAbsolutePath(); 
        br = new BufferedReader(new FileReader(fileName)); 

        try { 
         while ((line = br.readLine()) != null) { 
          System.out.println(line); 
         } 
        } catch (IOException ex) { 
         Logger.getLogger(TestPrintAllFiles.class.getName()).log(Level.SEVERE, null, ex); 
        } 
       } catch (FileNotFoundException ex) { 
        Logger.getLogger(TestPrintAllFiles.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     } 
    } 
} 
+0

@fsharpsquareコードをテストしてみましょう。 – Edwinfad

+0

私はコードを評価して、私はちょうどそれをテストしたし、問題なくコンパイルしています。コードの出力はいくつかの本当に奇妙な文字で、黒い四角形のようなものですか?その中に。私はそれが読んでいる実際のファイルと何か関係があるかどうかはわかりません。私のフォルダ内のファイルは.emlx – fsharpsquare

0

あなたが適して見つける場合は、もう一つの方法を試すことができます。コードの上

package com.grs.stackOverFlow.pack10; 

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.util.Arrays; 
import java.util.List; 

public class EScan { 

    public static void main(String[] args) throws IOException { 

     File dir=new File("C:/your drive/"); 
     List<File> files = Arrays.asList(dir.listFiles(f->f.isFile())); 
//if you want you can filter files like f->f.getName().endsWtih(".csv") 

     for(File f: files){ 
      List<String> lines = Files.readAllLines(f.toPath(),Charset.defaultCharset()); 
      //processing line 
      lines.forEach(System.out::println); 
     } 
    } 
} 

を私は加工ラインのようないくつかの方法で利用することができますが、以下のように行の前後に引用符を追加するように変更することができます。

lines.stream().map(t-> "'" + t+"'").forEach(System.out::println); 

またはプリントのみエラーメッセージライン

lines.stream().filter(l->l.contains("error")).forEach(System.out::println); 

上記のコードおよびバリエーションがテストされています。

+0

です。コードを評価して、私はちょうどそれをテストしました。最初にエラーはありませんが、コードをコンパイルすると、いくつかの異なるエラーが発生します。ご覧になるには、このスクリーンショットをご覧ください。 (https://snag.gy/keN3Wo.jpg) – fsharpsquare

+0

@fsharpsquare:ファイルの読み取り中にデフォルトの文字セットを使用するための新しいアップデートが追加されました。今はうまくいくはずです。しかし、問題が解決しない場合は、Files.readAllLines(f.toPath()、Charset.forName( "UTF-8"); – grsdev7

関連する問題