質問: br1.readLine()) != null) { list1.add(line1); } importは飛ばしています。 Java初心者です。 容量の大きいtxtデータを抽出・計算しなければいけないのですがOutOfMemoryErrorが出てしまいます。 読み込むデータは"※※※※※※※※※"という文字が出てくるまでの数50万行は必要のないデータなので格納せずに"※※※※※※※※※"を含むそれ以降のデータを格納したいのですが、上記の内容だと"※※※※※※※※※"の行も飛ばしてしまいます。 どのように処理すればよいでしょうか? よろしくお願いします。 ※ArrayListを使っているのは、この後に読み込んだデータから必要なデータを抽出・計算するためです。 ※-Xms,-Xmxの変更は試しています。
回答: Stream APIを使うのはいかがでしょう。 ``` import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Collectors; import java.util.List; class Main { public static void main(String[] args) throws IOException { String filename = "data.dat"; List data = Files.lines(Paths.get(filename)) .dropWhile(line -> !"※※※※※※※※※".equals(line)) .collect(Collectors.toList()) ; System.out.println(data); } } ``` **実行結果** Wandbox ``` [※※※※※※※※※, these, lines, are, important] ``` 今後の処理に依っては、リスト化を避けられ効率もさらに良くなります。 『必要なデータを抽出』するのも、Stream#filterを使えば楽チンです。 銀の弾丸では無いですが、知っておいて損はないです。