Я могу запустить программу для небольшого фрагмента файла, но если файл очень большого размера, и у нас нет такого большого количества памяти, то у нас закончится исключение памяти, что будет лучшим подходом для этой проблемы так что это может быть сделано в памяти с ниже тем же алгоритмом
package com.java.ds.arrays;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class FileRead {
public static void main(String[] args) {
HashMap<String, Integer> wordCountMap = new HashMap<String, Integer>();
BufferedReader reader = null;
try {
// Creating BufferedReader object
reader = new BufferedReader(new FileReader("ser.txt"));
// Reading the first line into currentLine
String currentLine = reader.readLine();
while (currentLine != null) {
// splitting the currentLine into words
String[] words = currentLine.toLowerCase().split(" ");
// Iterating each word
for (String word : words) {
// if word is already present in wordCountMap, updating its count
if (wordCountMap.containsKey(word)) {
wordCountMap.put(word, wordCountMap.get(word) + 1);
}
else {
wordCountMap.put(word, 1);
}
}
currentLine = reader.readLine();
}
// Getting the most repeated word and its occurrence
String mostRepeatedWord = null;
int count = 0;
Set<Entry<String, Integer>> entrySet = wordCountMap.entrySet();
for (Entry<String, Integer> entry : entrySet) {
if (entry.getValue() > count) {
mostRepeatedWord = entry.getKey();
count = entry.getValue();
}
}
System.out.println("The most repeated word in input file is : " + mostRepeatedWord);
System.out.println("Number Of Occurrences : " + count);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close(); // Closing the reader
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
У меня нет большого опыта работы с такими большими файлами.
Одна идея, которую я могу придумать
чтение этого файла на куски по 1Гб скажем
затем найдите частоту каждого члена в этом
и записать в другой файл
затем снова прочитайте следующие куски 1 ГБ
найти количество частот каждого участника
записать в другой файл
объединить эти два файла и получить пару ключ-значение
Повторите шаги 1 2 и 3
Но теперь уверен, что это будет подходящим подходом, если его, как я буду кодировать это