Не може да се копира крайната част на един файл в друг чрез BufferedWriter

Редактирано: Действителната грешка беше, че съдържанието на File1 е напълно копирано във File2 + с някои други редове текст. Файлът беше огромен. Така че въпросът трябва да бъде съответно преформулиран. Но отговорът е правилен. Решава проблема. Допълнителните линии се премахват.

Кодов фрагмент:

 public class ReadAFile {
    public static void main(String[] args) throws IOException {
        File file = new File("primes.txt");
        FileReader reader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(reader);

        BufferedWriter writer = new BufferedWriter(new FileWriter(new File("primesFile.txt")));
        char[] buffer = new char[1024];
        int read;
        while ((read = bufferedReader.read(buffer)) > 0) {
            writer.write(buffer, 0, buffer.length);
        }
        writer.close();
        bufferedReader.close();
    }
}

person Community    schedule 18.03.2014    source източник


Отговори (1)


    while ((read = bufferedReader.read(buffer)) > 0) {
        writer.write(buffer, 0, buffer.length);
    }

Обичайна грешка. Предполагате, че read() запълва буфера. Вижте Javadoc. Трябва да използвате броя на четенията в метода за запис:

    while ((read = bufferedReader.read(buffer)) > 0) {
        writer.write(buffer, 0, read);
    }

Но освен ако не знаете със сигурност, че файлът е текстов, трябва да използвате потоци, а не четци и писатели.

person user207421    schedule 18.03.2014
comment
Моля, прочетете редактирания въпрос. Тествах стойността на read. Последната стойност на read беше около 667. Не 1024. И така, защо бяха записани ненужни редове във втория файл? - person ; 18.03.2014
comment
Защото сте написали боклуци в края на буфера, които не сте прочели при последното четене. Остана от предишното четене. - person user207421; 20.03.2014