2017-04-01 5 views
0

Javaで大きなファイルを処理する方法について質問があります。Javaで1kbを超えるサイズを読み取ることができません

私はMac ProのEclipseネオンで作業します。私はJavaで.txtファイルを読みたい、ファイルのサイズはMBまたはGMです。 私はgoogleで検索し、ここですべての質問をstackoverflowで読んだので、ファイルを読む方法を試してみます。 私が試したのはFileReader and BufferedReader , also I tried FileInputStream です。私が100KB以下のファイルを読むと、eclipseは問題なく、すべてのファイルを読み込みます。 しかし、MGまたは100 KB以上のファイルがぶら下がっていたら、それを再起動する必要があります。 私は何が問題なのかわかりません、それは私のデバイスか何ですか? 私は本当にそれを混乱させました。私が試したすべての方法は、1MGでファイルを何秒も読むことができるからです。そして私と一緒にはそれはしません。 ファイル全体の読み取りを保証するために、使用できるAPIなどはありますか。 いずれにも同じ問題がありますが、アドバイスをお願いします。

これはコードである:

FileReader fileReader1 = new FileReader("/Users/Desktop/i/36.txt"); 
     BufferedReader br = new BufferedReader(fileReader1); 
      String line ; 
      while ((line = br.readLine()) != null) { 
       token+=line+" "; 
      } 
System.out.println(token); 

はまた、私はこれを試みた:

List<String> lines = Files.readAllLines(Paths.get(fileName), 
        StandardCharsets.UTF_8); 

      for (String line : lines) { 
       System.out.println(line); 
      } 
+0

実際のコード*を投稿する必要があります。あなたはどこかについたループがあるように聞こえます。 – chrylis

+1

問題はあなたのコードにあります。しかし、あなたはそれを投稿していないので、...また、100KB以上はビッグデータではありません。 "tinydata"というタグがより適切でしょう:-) –

+0

通常のコマンドプロンプト/ターミナルでsmmotlyを実行してみましたか? – Milan

答えて

0

最初は、(ループ内で文字列の連結を使用しない単一の変数にファイル全体を丸呑みされ、使用StringBuilder)おそらくGC負荷の下でマシンを粉砕します。

になるはずですが、大きなファイルでは時間がかかることがあります。私はそれのストリーム版ではないことに驚いています。デバッガで実行し、永遠にかかる行があるかどうかを確認します。

+0

ありがとうchrylis、私はStringBuilderを試して、それはそれを非表示にするすべての行を印刷してください、あなたはGCの負荷で何を意味するのですか?とラインを永遠に取る? – Geek

+0

@Geek "それはそれを隠す"? Javaで作業するつもりなら、ガベージコレクションの基本についてお読みください。 – chrylis

+0

ええ、私はそれを知っていますが、私はそれで何ができるのですか? – Geek

関連する問題