2013-04-30 2 views
1

Я пытаюсь написать программу Java, которая добавляет текущую дату и время системы в файл журнала (который запускается командным файлом при загрузке моего компьютера). Вот мой код.Добавить в файл

public class LogWriter { 

    public static void main(String[] args) { 

     /* open the write file */ 
     FileOutputStream f=null; 
     PrintWriter w=null; 

     try { 
      f=new FileOutputStream("log.txt"); 
      w=new PrintWriter(f, true); 
     } catch (Exception e) { 
      System.out.println("Can't write file"); 
     } 

     /* replace this with your own username */ 
     String user="kumar116"; 
     w.append(user+"\t"); 

     /* c/p http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/ */ 
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
     Date date = new Date(); 
     w.append(dateFormat.format(date)+'\n'); 

     /* close the write file*/ 
     if(w!=null) { 
      w.close(); 
     } 

    } 

} 

Проблема в том, что это не приложение :) к файлу. Может кто-нибудь указать, в чем проблема?

Заранее спасибо.

ответ

1

PrintWriter#append не добавляет данные в файл. Вместо этого он выполняет прямой write с использованием Writer. Вы должны объявить FileOutputStream конструктор с использованием флага на добавление:

f = new FileOutputStream("log.txt", true); 
w = new PrintWriter(f); // autoflush not required provided close is called 

Метод append все еще может быть использован и более удобным является println, который не будет требовать символа новой строки будет добавлено:

w.println(dateFormat.format(date)); 

флаг autoflush в конструкторе PrintWriter не требуется при условии, что вызывается close. close должен появиться в блоке finally.

+0

вы должны добавить 'after Writer. Как бы то ни было, это выглядит довольно плохо: «Писатель. Вам нужно объявить свой 'FileOutputStream' – Justin

+0

Спасибо за ответ. –

0

Конструктор PrintWriter не принимает параметр для принятия решения о присоединении к файлу или нет. Он управляет автозаполнением.

Создайте FileOutputStream (который может контролировать, добавлять ли к файлу), а затем переносите этот поток в ваш PrintWriter.

try { 
    f=new FileOutputStream("log.txt", true); 
    w=new PrintWriter(f, true); // This true doesn't control whether to append 
} 

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

  • Нет связанных вопросов^_^