2013-04-09 7 views
1

Вот мой код, мне интересно, почему он ничего не записывает. Когда я ввожу в консоли он говорит:Я пытаюсь записать текст с консоли в текстовый файл, и текстовый файл не создается

Здравствуйте

Апр 08, 2013 10:13:47 PM java.util.logging.LogManager $ RootLogger войти

INFO: Здравствуйте

Однако , ничто не записывается в файлы.

import java.io.IOException; 
import java.util.Scanner; 
import java.util.logging.FileHandler; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.logging.SimpleFormatter; 

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

     while (1 == 1) { 
      String text; 
      Scanner in = new Scanner(System.in); 
      text = in.nextLine(); 
      FileHandler fileTxt; 
      SimpleFormatter formatterTxt; 
      Logger logger = Logger.getLogger(""); 
      logger.setLevel(Level.INFO); 
      fileTxt = new FileHandler("../loggedText.txt"); 
      formatterTxt = new SimpleFormatter(); 
      fileTxt.setFormatter(formatterTxt); 
      logger.addHandler(fileTxt); 
      logger.info(text); 
     } 
    } 
} 
+0

Не желая быть одним из «тех» людей, но считаете ли вы использование специальной библиотеки регистрации, например log4j, вместо встроенных классов ведения журнала? – Catchwa

ответ

0

Ваша петля никогда не заканчивается, что означает, что JVM никогда не выполняет надлежащего выключения. FileHandler только закрывается и синхронизируется, если все ловушки завершения регистрации выполняются нормально. Возможно, что данные были написаны, но никогда не были synched with the filesystem.

Давайте создадим исправленный пример, который может прекратить нормально:

public class main { 

    private static final Logger logger = Logger.getLogger(""); //Prevent G.C. 

    public static void main(String[] args) throws IOException { 
     logger.setLevel(Level.INFO); 
     FileHandler fileTxt = new FileHandler("../loggedText.txt"); 
     fileTxt.setFormatter(new SimpleFormatter()); 
     logger.addHandler(fileTxt); 

     System.out.println("root.level " + logger.getLevel()); 
     System.out.println("FileHandler.level " + fileTxt.getLevel()); 
     Scanner in = new Scanner(System.in); 
     String text; 
     while (true) { 
      System.out.print("Enter text: "); 
      text = in.nextLine(); 
      if (text != null && !text.isEmpty() 
        && !"quit".equalsIgnoreCase(text)) { 
       logger.info(text); 
      } else { 
       System.out.println("Done!"); 
       break; 
      } 
     } 
    } 
} 

Выведет следующие к консоли:

root.level INFO 
FileHandler.level ALL 
Enter text: hello 
Nov 22, 2016 10:39:19 AM java.util.logging.LogManager$RootLogger log 
INFO: hello 
Enter text: quit 
Done! 

На файловой системе loggedText.txt, содержащий:

Nov 22, 2016 10:39:19 AM java.util.logging.LogManager$RootLogger log 
INFO: hello 

Если вы не можете нормально завершить, вам нужно явно вызвать FileHandler.close() на обработчиках, которые вы создаете.

Примечание: Имя и имя имени зарегистрированного журнала неверны, что называется JDK-8152389.

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