Когда я запускаю класс, он создает пустой файл размером 0 КБ. Может кто-то указать, где я ошибаюсь? - PullRequest
3 голосов
/ 17 марта 2012

Я пытаюсь что-то записать в имя файла "aq.txt". С каталогом проблем нет.

FileOutputStream fos= null;
try{
    String xyz= "You should stop using xyz";
    fos= new FileOutputStream("aq.txt");
    Writer wrt= new BufferedWriter(new OutputStreamWriter(fos));
    wrt.write(xyz);
}    
catch(IOException e){
    System.out.println("Couldn't write to the file: "+e.toString());
}
finally{
    if(fos!=null){
        try{
            fos.flush();
            fos.close();
        }
        catch(Exception e1){
            e1.printStackTrace();
        }
    } 
}

1 Ответ

3 голосов
/ 17 марта 2012

Вы закрываете поток , но не писатель .Все данные хранятся в буфере записи.Используйте это вместо:

Writer writer = null;
try{
    String xyz= "You should stop using xyz";
    writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream("aq.txt")));
    writer.write(xyz);
    writer.flush();
}    
catch(IOException e) {
    System.out.println("Couldn't write to the file: " + e.toString());
}
finally{
    if(writer != null){
        try {
            writer.close();
        }
        catch(IOException e1) {
            e1.printStackTrace();
        }
    }
}

(Закрытие писателя закроет базовый OutputStreamWriter, который также закроет FileOutputStream.)

Обратите внимание, что я переместил flushвызов в блок try - вы не хотите flush в блоке finally, так как если это не удастся (например, у вас недостаточно места на диске), вы не закроете поток.Обычно я все равно не выполняю явную очистку, оставляя для этого close, но меня предупреждали, что есть некоторые ситуации, в которых некоторые реализации будут молча перехватывать исключения во время очистки: (*

...