Почему последние несколько строк отсутствуют в текстовом файле, который я создаю? - PullRequest
0 голосов
/ 05 мая 2011

У меня есть функция, которая создает 7 различных текстовых файлов со строками данных.Эти 7 файлов затем объединяются в один файл в другой функции, используя следующую функцию:

public void createSingle683File(int groupNumber, FileWriter wr){
        try{
            if(new File(printDir+"683_"+groupNumber+".txt").exists()){
                File f683 = new File(printDir+"683_"+groupNumber+".txt");
                BufferedReader input = new BufferedReader(new FileReader(f683));
                String line = null;
                while ((line = input.readLine()) != null){
                    //write contents of existing file to new file
                    wr.write(line+"\n");
                }
                //close bufferedInput
                input.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

Код вызова:

    File fileHandle683 = new File(printDir+"683.txt");
                FileWriter wr683 = new FileWriter(fileHandle683);
                for (int groupNumber = 1; groupNumber < 8; groupNumber++){
                    createSingle683File(groupNumber,wr683);
                }
.
.
.
.
.//stuff
wr683.close();

В конце концов, отсутствует окончательный 683.txt50 строк из 7-го файла (683_7.txt), и я не могу понять, почему.Это всегда и только последние несколько строк окончательного файла, которые отсутствуют.Я не могу сказать, закрываю ли я буфер bufferInput или что.

Любые идеи будут с благодарностью.Я могу проверить любые идеи очень быстро.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

Я не вижу, где вы закрываете wr683. Я подозреваю, что данные остаются в буфере, когда процесс останавливается. По крайней мере, позвоните flush().

3 голосов
/ 05 мая 2011

Вы вызываете flush() и / или close() в этом экземпляре FileWriter?

0 голосов
/ 05 мая 2011

В настоящее время вы не закрываете средство записи файла для окончательного файла.Таким образом, может случиться так, что содержимое, которое вы пропускаете в настоящее время, все еще находится в кэше потокового ввода-вывода.Поэтому закройте экземпляр FileWriter конечного файла и посмотрите на содержимое файла.

Поэтому после цикла for просто введите

wr683.close ();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...