私は、タブで区切られた大量のテキストデータをDATE NAME MESSAGE
という形で持っています。大きな意味では、1.76GBのコレクションが1075個の実際のファイルに分割されています。 NAME
のデータをからすべてのファイルに取得する必要があります。これまで私はこれを持っています:文字列がメモリから分割される
File f = new File(directory);
File files[] = f.listFiles();
// HashSet<String> all = new HashSet<String>();
ArrayList<String> userCount = new ArrayList<String>();
for (File file : files) {
if (file.getName().endsWith(".txt")) {
System.out.println(file.getName());
BufferedReader in;
try {
in = new BufferedReader(new FileReader(file));
String str;
while ((str = in.readLine()) != null) {
// if (all.add(str)) {
userCount.add(str.split("\t")[1]);
// }
// if (all.size() > 500)
// all.clear();
}
in.close();
} catch (IOException e) {
System.err.println("Something went wrong: "
+ e.getMessage());
}
}
}
私のプログラムは、常に-Xmx1700でもメモリ例外を出しています。私はそれを超えて行くことはできません。とにかくArrayList<String>
のNAME
を処理できるようにコードを最適化できますか?
は、この必要性は、Javaプログラムであることをしていますか?これにLinux/Unixツールを使用できますか? Windowsのバッチ? – Marc
それはJavaプログラムである必要はありませんが、私はこれのためにLinuxツールを使用する方法を知らない。ここでの目標は、ユーザーあたりのメッセージ数を1〜200の間でカウントすることです。また、同じユーザーは一緒にクラスタ化されますが、2つの別々のファイルに線形に分割できます。 – javaCity
あなたのOSは? – Marc