Я пытаюсь переписать этот словарь: 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? Если да, то как я могу использовать его без перезаписи того, что уже написано?