这是我的代码,我想知道为什么它没有记录任何内容。当我在控制台中输入时,它显示:
你好
2013 年 4 月 8 日 10:13:47 PM java.util.logging.LogManager$RootLogger 日志
信息:你好
但是,没有任何内容被记录到任何文件中。
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);
}
}
}
最佳答案
您的循环永远不会终止,这意味着 JVM 永远不会执行正确的关闭。仅当所有日志记录关闭 Hook 正常执行时,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 .
关于java - 我正在尝试将文本从控制台记录到文本文件,但未创建文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15892193/