试图一次编写多个文件 - Java

时间:2013-05-08 17:50:35

标签: java file-io dictionary

我正在尝试将我拥有的字典文件拆分成多个不同长度的字典,例如,如果我想把它拿出并放入长度为2,3,4,...... n的较小字典中,其中然后我可以更快地搜索它们。当我说得更快时,我的意思是我将知道输入长度,因此访问相应的长度字典(整体的一小部分)将意味着更快的访问。这是我当前的实现,它生成文件但不按我的意愿写入它们。理想情况下,例如长度为2的所有单词都将写入length2文本文件中。有人有什么建议吗?

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.IOException;

public class Main {

public static void main(String[] args) throws IOException {
    FileReader fr = new FileReader("dictionary.txt");
    PrintWriter l2 = new PrintWriter("dictionary_length2.txt", "UTF-8");
    PrintWriter l3 = new PrintWriter("dictionary_length3.txt", "UTF-8");
    PrintWriter l4 = new PrintWriter("dictionary_length4.txt", "UTF-8");
    PrintWriter l5 = new PrintWriter("dictionary_length5.txt", "UTF-8");
    PrintWriter l6 = new PrintWriter("dictionary_length6.txt", "UTF-8");
    PrintWriter l7 = new PrintWriter("dictionary_length7.txt", "UTF-8");
    PrintWriter l8 = new PrintWriter("dictionary_length8.txt", "UTF-8");
    PrintWriter l9 = new PrintWriter("dictionary_length9.txt", "UTF-8");
    PrintWriter l10 = new PrintWriter("dictionary_length10.txt", "UTF-8");
    PrintWriter l11 = new PrintWriter("dictionary_lengty11.txt", "UTF-8");
    PrintWriter l12 = new PrintWriter("dictionary_length12.txt", "UTF-8");
    PrintWriter l13 = new PrintWriter("dictionary_length13.txt", "UTF-8");
    PrintWriter l14 = new PrintWriter("dictionary_length14.txt", "UTF-8");
    PrintWriter l15 = new PrintWriter("dictionary_length15.txt", "UTF-8");
    PrintWriter l16 = new PrintWriter("dictionary_length16.txt", "UTF-8");
    PrintWriter l17 = new PrintWriter("dictionary_length17.txt", "UTF-8");
    PrintWriter l18 = new PrintWriter("dictionary_length18.txt", "UTF-8");
    PrintWriter l19 = new PrintWriter("dictionary_length19.txt", "UTF-8");
    PrintWriter l20 = new PrintWriter("dictionary_length20.txt", "UTF-8");
    PrintWriter l21 = new PrintWriter("dictionary_length21.txt", "UTF-8");

    BufferedReader tr = new BufferedReader(fr);
    String temp;
    int temp_length;

    for(int i = 0; i < 60388; i++){
        temp = new String(tr.readLine());
        temp_length = temp.length();
        if(temp_length == 2)
            l2.println(temp);
        if(temp_length == 3)
            l3.println(temp);
        if(temp_length == 4)
            l4.println(temp);
        if(temp_length == 5)
            l5.println(temp);
        if(temp_length == 6)
            l6.println(temp);
        if(temp_length == 7)
            l7.println(temp);
        if(temp_length == 8)
            l8.println(temp);
        if(temp_length == 9)
            l9.println(temp);
        if(temp_length == 10)
            l10.println(temp);
        if(temp_length == 11)
            l11.println(temp);
        if(temp_length == 12)
            l12.println(temp);
        if(temp_length == 13)
            l13.println(temp);
        if(temp_length == 14)
            l14.println(temp);
        if(temp_length == 15)
            l15.println(temp);
        if(temp_length == 16)
            l16.println(temp);
        if(temp_length == 17)
            l17.println(temp);
        if(temp_length == 18)
            l18.println(temp);
        if(temp_length == 19)
            l19.println(temp);
        if(temp_length == 20)
            l20.println(temp);
        if(temp_length == 21)
            l21.println(temp);
    }

    tr.close();
    l2.close();
    l3.close();
    l4.close();
    l5.close();
    l6.close();
    l7.close();
    l8.close();
    l9.close();
    l10.close();
    l11.close();
    l12.close();
    l13.close();
    l14.close();
    l15.close();
    l16.close();
    l17.close();
    l18.close();
    l19.close();
    l20.close();
    l21.close();
    System.out.println("Complete.");
}
}

1 个答案:

答案 0 :(得分:3)

Tangental“回答”如下。 (这个应该也打印出文件的内容,除非我遗漏了一些非常基本的内容。)


每当xN表格中有一组变量(例如l2l3l22)时,他们通常 替换为List集合类型,例如ArrayList

这只是一个展示如何可以减少重复和固定边界的示例:

int MAX_WORD_LEN = 22; // making this dynamic left as an excercise
List<PrintWriter> writers = new ArrayList<PrintWriter>();

for (int i = 0; i <= MAX_WORD_LEN; i++) {
    PrintWriter w = new PrintWriter("dictionary_length" + i + ".txt", "UTF-8");
    writers.Add(w);
}

String line;
while ((line = tr.readLine()) != null) {
   int len = line.length();
   if (len < writers.size()) {
       writers.get(len).println(line);
   }
}

for (PrintWriter w : writers) {
    w.close();
}

可以进行轻微调整,以便不创建“0”或“1”文件。