如何为多个输入文件生成多个输出文件

时间:2018-02-15 21:37:33

标签: java file file-io

我正在尝试为目录中的每个文件生成字频,并将输出转换为多个文件。 输入文件包含句子,输出文件包含单词和重复的次数。

使用以下代码,我可以一次读取多个文件,但输出生成一个文件。

我想将每个输入文件的输出生成到不同的文件中。

代码:

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);
                }
            }
        }
    }
}

1 个答案:

答案 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()
        }
    }