У меня есть большая коллекция текстовых данных с разделителями вкладок в форме DATE NAME MESSAGE
. По большому счету, я имею в виду набор из 1.76GB, разделенный на 1075 файлов. Я должен получить данные от все файлы. До сих пор у меня есть следующее:Строка, выделенная из памяти
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.Кроме того, одни и те же пользователи группируются вместе, но могут быть разделены на два отдельных файла линейно. – javaCity
Какая у вас ОС? – Marc