2013-11-17 13 views
1

Я пытаюсь записать некоторые строки в файл с именем «file.txt», но когда я запускаю программу, ничего не записывается. Если файл не существует, он создаст файл, но ничего не напишет.Formatter не записывается в файл

public class CreateTextFile 
{ 
    private Formatter output; 

    public void openFile(String filename) 
    { 
     { 
      try 
      { 
       output = new Formatter(filename); 
      } 
      catch(FileNotFoundException fileNotFoundException) 
      { 
       System.err.println("Error"); 
      } 
     } 
    } 

    public void addText() 
    { 
     Random randomnumber = new Random(); 
     int lines = 1 + randomnumber.nextInt(10); 

     String text[] = new String[lines]; 

     output.format("%s","Hello"); 

     /*for (int i = 0; i < lines; i++) 
     { 
      Textline tokens = new Textline("Hello",1); 
      output.format("%s",tokens.toString()); 
     }*/ 
    } 
} 
+0

У вас есть дополнительный блок (фигурные скобки) за пределами try-catch в вашем методе openFile, который не нужен. – grkvlt

ответ

2

Закрыть Formatter раз все форматирование завершено

output.close(); 
1

Выход из java.util.Formatter не записывается сразу, но в буфере памяти первого. Обратите внимание на документацию для file аргумента конструктора, который вы использовали, в http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#Formatter(java.io.File)

файла для использования в качестве пункта назначения этого форматировщика. Если файл существует, он будет усечен до нулевого размера; в противном случае будет создан новый файл. Выход будет записан в файл и буферизирован.

Поскольку Formatter класс реализует оба Flushable и Closeable, интерфейсы, которые он имеет flush() и close() методы. Для сброса буферизованных данных на диск вызовите flush(), и ожидающие данные будут записаны немедленно. Затем, как только вы закончите использовать Formatter, вызовите close(), и остальные буферизованные данные будут записаны.

Так, например, вы могли бы иметь код, как это после форматирования каждого бита данных:

output.format("%s","Hello"); 
output.flush(); 

Или, чтобы убедиться, что все написано, даже если есть исключение, используйте наконец блок для вызова close() метод:

Formatter output = new Formatter("file.txt"); 
try { 
    // your code 
} finally { 
    output.close(); 
} 

Если вы используете Java 7.0 то, потому что Formatter также реализует AutoCloseableпримерочных с-resou РЭЦ блок может быть использован вместо блока в наконец:

try (Formatter output = new Formatter("file.txt") { 
    // your code 
} 

Это автоматически вызывает close(), когда блок завершается.

Смежные вопросы