java多文件开发,尝试一次写多个文件 - Java

I am trying to split a dictionary file that I have into multiple dictionaries of different lengths, for example if I want take it and put it into smaller dictionaries of length 2, 3, 4, ..... n, where I can then search them quicker. When I say quicker I mean that I will know the input length and therefore accessing the corresponding length dictionary (a fraction of the whole) will mean quicker accesses. This is my current implementation that generates the files but doesn't write to them like I desire. Ideally, all words of length 2 for example will be written into the length2 text file. Anyone have any suggestions?

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.");

}

}

解决方案

Tangental "answer" follows. (This should also print out contents to the files, unless I'm missing something very basic.)

Whenever there is a set of variables in the form xN (e.g. l2, l3, l22), they should usually be replaced with a List collection type such as an ArrayList.

This is just an example to show how can be reduce duplication and fixed bounds:

int MAX_WORD_LEN = 22; // making this dynamic left as an excercise

List writers = new ArrayList();

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

}

Slight adjustments can be made to not create a "0" or "1" file.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值