2013-04-06 1 views
3

Я пытаюсь записать в текстовый файл, но даже если метод создает файл, если он не существует, он не записывает. Я прошел через несколько других сообщений с подобной проблемой и последовал совету, но не повезло.FileWriter не пишет в файл даже после .flush() /. Close()

С помощью отладчика данные String содержат правильные данные, которые должны быть записаны, но они никогда не записываются в текстовый файл.

Любые советы по поводу того, что я пропустил, будут оценены.

private static void createReservation(String filmName, String date, int noOfSeats, String username) { 
    FileWriter fw = null; 
    try { 
     File bookingFile = new File("C:\\server\\bookinginfo.txt"); 
     if (!bookingFile.exists()) 
     { 
      bookingFile.createNewFile(); 
     } 
     fw = new FileWriter(bookingFile.getName(),true); 
     String data = "<"+filmName+"><"+date+"><"+Integer.toString(noOfSeats)+"><"+username+">\r\n"; 
     fw.write(data); 
     fw.flush(); 
    } catch (IOException ex) { 
     Logger.getLogger(FilmInfoHandler.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      fw.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(FilmInfoHandler.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
+2

Вы видите какие-либо исключения в журналах? Можете ли вы определенно написать в этот файл? –

+0

Исключений не выбрасывается вообще. Не слишком уверен, как определить, могу ли я писать в этот файл конкретно, но в другой области моего проекта программа создает и записывает два отдельных файла XML, расположенных в том же каталоге. – Nadeem

ответ

17

Понял - это проблема:

new FileWriter(bookingFile.getName(),true); 

Метод getName() просто возвращают bookinginfo.txt, что означает, что будет создавать файл с именем bookinginfo.txt в текущем рабочем каталоге.

Просто используйте конструктор, который принимает File:

fw = new FileWriter(bookingFile, true); 

Также обратите внимание, что вам не нужно вызывать createNewFile() первый - FileWriter конструктор будет создавать файл, если он не существует.

Как в стороне, я лично не являюсь поклонником FileWriter - его всегда использует кодировку по умолчанию для платформы. Я бы рекомендовал использовать FileOutputStream, завернутый в OutputStreamWriter, где вы можете указать кодировку. Или используйте вспомогательные методы Guava, которые делают все это несколько проще. Например:

Files.append(bookingFile, data, Charsets.UTF_8); 
+0

Это сработало отлично. Новое для Java, поэтому я не мог этого видеть. Большое спасибо. – Nadeem

1

Используйте это вместо

fw = new FileWriter(bookingFile.getAbsolutePath(),true); 

из

fw = new FileWriter(bookingFile.getName(),true);