2015-05-29 4 views
0

У меня есть ниже кодFileWriter не пишет, чтобы файл

try 
    { 
     FileWriter fileWriter = new FileWriter("C:\\temp\\test.txt"); 
     fileWriter.write("Hi this is sasi This test writing"); 
     fileWriter.append("test"); 
    } 
    catch(IOException ioException) 
    { 
     ioException.printStackTrace(); 
    } 

после выполнения его файл будет успешно создан, но созданный файл пуст

так, что не так с кодом?

+1

Попробуйте флеш после написания. – Thomas

+1

попытайтесь смыть писателя. По умолчанию он печатает результат, когда значение заполняется только буфером или закрывается запись. – Shriram

+0

Примечание: рассмотрите использование API файлов NIO.2 (представленный в Java SE 7) вместо FileWriter. – Puce

ответ

4

Вы должны закрыть FileWriter, иначе он не будет промывать текущий буфер. Вы можете вызвать flush метод непосредственно ..

fileWriter.flush() 
fileWriter.close() 

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

+1

Убедитесь, что вы вызываете функцию close() в объявлении finally. Лучше всего использовать пробные ресурсы. – Puce

1

Пожалуйста, попробуйте следующее:

try 
    { 
     FileWriter fileWriter = new FileWriter("C:\\temp\\test.txt"); 
     fileWriter.write("Hi this is sasi This test writing"); 
     fileWriter.append("test"); 
     fileWriter.flush(); // empty buffer in the file 
     fileWriter.close(); // close the file to allow opening by others applications 
    } 
    catch(IOException ioException) 
    { 
     ioException.printStackTrace(); 
    } 
2

Вам нужно закрыть filewriter еще текущий буфер не будет заподлицо и не позволит записать в файл.

fileWriter.flush(); //just makes sure that any buffered data is written to disk 
fileWriter.close(); //flushes the data and indicates that there isn't any more data. 

От Javadoc

Закрыть поток, смывает его первым. Как только поток был закрыт, дальнейшие вызовы write() или flush() вызовут исключение IOException . Однако закрытие ранее закрытого потока не влияет.

1

Попробуйте это:

import java.io.*; 

public class Hey 

{ 
    public static void main(String ar[])throws IOException 
    { 

      File file = new File("c://temp//Hello1.txt"); 
      // creates the file 
      file.createNewFile(); 
      // creates a FileWriter Object 
      FileWriter writer = new FileWriter(file); 
      // Writes the content to the file 
      writer.write("This\n is\n an\n example\n"); 
      writer.flush(); 
      writer.close(); 
    } 
} 
2

Закрытие отсутствует. Следовательно, не последние буферизованные данные не были записаны на диск.

Закрытие также происходит с использованием ресурсов-попыток. Даже когда будет выбрано исключение. Также не требуется flush до close, так как закрытие сбрасывает все буферные данные в файл.

try (FileWriter fileWriter = new FileWriter("C:\\temp\\test.txt")) 
{ 
    fileWriter.write("Hi this is sasi This test writing"); 
    fileWriter.append("test"); 
} 
catch (IOException ioException) 
{ 
    ioException.printStackTrace(); 
} 
Смежные вопросы