私は、100万のレコードを含むテキストファイルの1つを持っています。私はファイルを読むために非常に古い方法を使用していますが、メモリの問題のために時間がかかり、完了できませんでした。私は、Javaを使用するか、どんな外部ライブラリを使用してファイルを読むために最善かつ最適な方法をお勧めすることができます場合は、本当に感謝しています。(最終的な解決策は、時間がかかるを減少させるべきである)ここで私は前述したように私のコードで、また使用javaを使用してファイルを読み取る最も効率的な方法は何ですか?
BufferedReader reader = null;
List<String> fileLines = new ArrayList<String>();
String line = "";
reader = new BufferedReader(new java.io.FileReader(file));
while ((line = reader.readLine()) != null) {
fileLines.add(line);
}
reader.close();
return fileLines;
別の方法ですが、結果は同じです。
public static void fileReading(File file, Object executingClass, String methodName, int size) throws IOException {
try {
Method method = executingClass.getClass().getMethod(methodName, List.class);
BufferedReader reader = null;
List<String> fileLines = new ArrayList<String>();
String line = "";
reader = new BufferedReader(new java.io.FileReader(file));
int track = 0;
while ((line = reader.readLine()) != null) {
track++;
fileLines.add(line);
if (0 == track % size) {
method.invoke(executingClass, fileLines);
fileLines.clear();
}
}
if (!fileLines.isEmpty()) {
method.invoke(executingClass, fileLines);
fileLines.clear();
}
reader.close();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
メモリにそれらのすべてを格納することなく、記録を1つずつ処理するようにしてください。 – Berger
各行をリストに追加してファイル全体をメモリに読み込もうとしています。 JavaのJVMにはデフォルトで〜1GBの制限があります(ただし、増やすことはできます)。なぜあなたは一度に各行を読むことができません、あなたが必要とする処理をしてからそれを投げ捨てるのですか? – Michael
私の質問を更新してください。私の新しいメソッドを使用して私は一度に1000文字列のリストを取得し、それを処理します。 –