设计思路
- 逐行读取:为避免一次性将大量数据读入内存导致内存溢出,使用
BufferedReader
逐行读取文件。
- 字符串处理:利用
String
的split
方法进行分词,使用HashMap
统计词频。
- 排序:将
HashMap
中的数据转换为List
,使用Collections.sort
根据词频等规则排序。
- 输出:使用
BufferedWriter
将处理结果逐行写入输出文件。
完整代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TextProcessor {
public static void main(String[] args) {
String inputFilePath = "input.txt";
String outputFilePath = "output.txt";
try (BufferedReader br = new BufferedReader(new FileReader(inputFilePath));
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFilePath))) {
Map<String, Integer> wordFrequencyMap = new HashMap<>();
String line;
while ((line = br.readLine()) != null) {
String[] words = line.split("\\s+");
for (String word : words) {
wordFrequencyMap.put(word, wordFrequencyMap.getOrDefault(word, 0) + 1);
}
}
List<Map.Entry<String, Integer>> list = new ArrayList<>(wordFrequencyMap.entrySet());
Collections.sort(list, (a, b) -> b.getValue().compareTo(a.getValue()));
for (Map.Entry<String, Integer> entry : list) {
bw.write(entry.getKey() + ": " + entry.getValue());
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}