有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java BufferedWriter停止写入

我正试图重写这本词典:dictionary.txt按长度排序,而不是按字母顺序排序。我有以下代码(在main(String[]args)中):

    BufferedReader read = new BufferedReader(new FileReader(new File(DIC_READ_PATH)));
    BufferedWriter write= new BufferedWriter(new FileWriter(DIC_WRITE_PATH),1);
    ArrayList<String> toWrite = new ArrayList<String>();
    for (int a = read.read(); a != -1; a = read.read()){
        char c = (char) a;
        toWrite.add("" + c + read.readLine());
    }
    read.close();
    Collections.sort(toWrite, new MyComparator());
    for (int a = 0; a <= 70000; a += 10000){
        write.write(toWrite.subList(a, a + 10000).toString().replaceAll("[\\[,\\]]", "").replaceAll(" ", "\n"));
        write.flush();
    }

    write.write(toWrite.subList(80000, toWrite.size()).toString().replaceAll("[\\[,\\]]", "").replaceAll(" ", "\n"));
    write.close();

MyComparator:

public class MyComparator implements Comparator<String> {
@Override
    public int compare(String arg0, String arg1) {
    // TODO Auto-generated method stub
        if (arg0.length() == arg1.length()){
            return arg0.compareTo(arg1); 
        } 
        return arg0.length() < arg1.length() ? -1 : +1;
    }
}

它对Arraylist进行了很好的排序,但是当我写字符串时,它不会写8个单词。我尝试在BufferedWriter上更改缓冲区,发现较小的缓冲区会有所帮助,所以我将缓冲区设置为1。我发现:Buffered Writer Java Limit / Issues并在每次写入和结束时尝试刷新(甚至在之后改变缓冲区)。我仍然得到80360字而不是80368字。为什么它不写出完整的单词列表?我必须使用另一个BufferedWriter吗?如果是这样,我如何使用它而不覆盖已经写入的内容


共 (2) 个答案

  1. # 1 楼答案

    您正在使用输入数据的随机字符:

    for (int a = read.read(); a != -1; a = read.read()){
    

    不要混合使用read()readLine()调用。只需使用readLine()并测试null

    另外,在写结果时,不要使用列表。对于字符串impl和讨厌的regex替换,只需在列表上循环并写一个单词,然后换行即可

  2. # 2 楼答案

    我认为问题在于:

     for (int a = 0; a <= 70000; a += 10000){
            write.write(toWrite.subList(a, a + 10000).toString().replaceAll("[\\[,\\]]", "").replaceAll(" ", "\n"));
            write.flush();
        }
    

    你应该写信。写入(“\n”);冲水前