gpt4 book ai didi

java - BufferedWriter 停止写入

转载 作者:行者123 更新时间:2023-12-01 23:55:06 25 4
gpt4 key购买 nike

我正在尝试重写这本字典: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();

我的比较器:

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 吗?如果是这样,我怎样才能使用它而不覆盖已经写的内容?

最佳答案

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

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

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

另外,要写入结果,请不要使用 List.toString impl 和讨厌的正则表达式替换,只需循环列表并写入一个单词,后跟一个换行符。

关于java - BufferedWriter 停止写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com