2013-10-02 3 views
0

У меня есть этот код, который копирует элементы массива в текстовый файл, и после копирования файлов у меня есть кнопка, которая открывает файл i-copy.Не удается закрыть текстовый файл

try 
    {   
     print = new PrintWriter("C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt"); 
     print.println("EMPLOYEES PAYROLL RECORD AS OF "+dateFormat.format(date)); 
     print.println(); 

     for(int x=0;x<department.length;x++) 
     { 
      print.println("DEPARTMENT: "+department[x].toUpperCase()); 
      print.println("\tPAYROLL PERIOD\tEMPLOYEE NUMBER\tNAME\tPAY RATE\tHOURS WORKED\tSALARY"); 
      print.println(); 

      for(int y=0;y<trans.length;y++) 
      { 
       if(trans[y] == null) 
       { 
        continue; 
       } 
       if(trans[y].getDepartment().equals(department[x])) 
       { 
        print.println("\t"+trans[y].getPayrollPeriod()+"\t"+trans[y].getEmpNo()+"\t\t"+trans[y].getName()+"\t"+trans[y].getPayRate()+"\t\t"+trans[y].getHoursWorked()+"\t\t"+String.format("%,.2f", (trans[y].getPayRate()*trans[y].getHoursWorked()))); 
        total+=(trans[y].getPayRate()*trans[y].getHoursWorked()); 
       } 
      } 
      print.println("\t\t\t\t\t\t\t\t\tTOTAL:\t"+String.format("%,.2f", total)); 
      print.println(); 
      total=0; 
     } 

     print.close(); 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 

К сожалению, в моем текстовом файле не было ОБНОВЛЕНО, если i-закрыть систему.

Есть ли способ, чтобы мой текстовый файл обновлялся автоматически без ЗАКРЫТИЯ системы?

+1

'flush()' 'flush()'. Я не думаю, что «PrintWriter» автоматически сбрасывается. «BufferedWriter» должен после записи X байтов. –

+0

'close()' должен, я думаю, 'flush()'. –

+0

Вы можете выполнить флеш(). close() автопотоки. Почему вы не хотите закрывать писателя? Вы должны закрыть писателя, как только вы закончите с ним. – aglassman

ответ

0

Это очень сильно зависит от системы. flush() обычно должен работать, но это все не урезано. Есть встроенная флеш-система, в которой вы также можете вызвать синхронизацию.

Но для первого apporach попробовать flush()

3

Вы действительно можете создать PrintWriter with autoFlush turned on:

print = new PrintWriter(new FileOutputStream 
    ("C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt"), true); 

Здесь второй параметр true. Согласно Javadoc:

autoFlush - A boolean; if true, the println, printf, or format methods will flush the output buffer

+0

Единственные конструкторы с 'boolean' для autoflush имеют класс' Writer' или 'OutputStream', ни один из них не содержит строку' String' –

+0

@JonathanDrapeau: Спасибо, это была глупая ошибка копирования/вставки. Я исправил это. – anubhava

+0

разве это не очень похоже на «BufferedWriter»? – SnakeDoc

0

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

0

В документации сказано, что PrintWriter не скрывает линии автоматически.

Вам может потребоваться использовать другой конструктор для PrintWriter:

PrintWriter(File file) 

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

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