我正在尝试为目录中的每个文件生成字频,并将输出转换为多个文件。 输入文件包含句子,输出文件包含单词和重复的次数。
使用以下代码,我可以一次读取多个文件,但输出生成一个文件。
我想将每个输入文件的输出生成到不同的文件中。
代码:
import java.util.*;
import java.io.*;
public class words {
public static void main(String args[]) throws Exception {
File dir = new File("foldername");
// Create a TreeMap to hold words as key and count as value
Map<String, Integer> map = new TreeMap<>();
for(File file : dir.listFiles())
{
try ( // Create an input stream
Scanner input = new Scanner(file);
) {
while (input.hasNext()) {
String[] words = input.nextLine().split("[ \n\t\r\"\'.,;:!?()]");
store(map, words);
}
}
// Get all entries into a set
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
//To write the output into a text file
PrintWriter out = new PrintWriter("out.txt");
// Get key and value from each entry
for (Map.Entry<String, Integer> entry: entrySet)
out.println(entry.getValue() + "\t" + entry.getKey());
out.close();
}
}
/*To sort the occurrence of words*/
private static void store(Map<String, Integer> map, String[] words) {
for (int i = 0; i < words.length; i++) {
String key = words[i].toLowerCase();
if (key.length() > 0 && Character.isLetter(key.charAt(0))) {
if (!map.containsKey(key)) {
map.put(key, 1);
}
else {
int value = map.get(key);
value++;
map.put(key, value);
}
}
}
}
}
答案 0 :(得分:1)
您只需设置一个输出文件&#34; out.txt&#34;。您必须使用多个文件。
例如:
for(File file : dir.listFiles()) {
try ( // Create an input stream
Scanner input = new Scanner(file);
) {
while (input.hasNext()) {
String[] words = input.nextLine().split("[ \n\t\r\"\'.,;:!?()]");
store(map, words);
}
//Here use Printwriter
try(PrintWriter pw = new PrintWriter(file.getName() + "_out.txt") {
//iterate over entryset and clear the map after with map.clear()
}
}