背景:您好!首先,请记住,我是Java的新手,因此,如果我有什么不对劲,请原谅我。我一直在尝试格式化我的控制台并将其输出保存为文本文件2天。到目前为止,这是我的代码:
我试图将控制台的格式设置为
[12/20/2017 23:55:30]节目(此处留言)
我这样做:
public class Format {
private static final DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
PrintStream console = new PrintStream(System.out) {
public void println(String x) {
Date date = new Date();
super.println("[" + sdf.format(date) + "] " + "program(" + x + ")");
}
};
同时:
public void progStream() throws FileNotFoundException {
System.setOut(console);
System.out.println("This is a test.");
}
到目前为止,它工作得很好,我可以看到所有的系统输出都显示在eclipse的控制台上,格式正确。但是,当我尝试将其保存为文本文件时,它只保存消息。没有格式。
public void progStream() throws FileNotFoundException {
File log = new File("log" + System.currentTimeMillis() + ".txt");
FileOutputStream fos = new FileOutputStream(log);
PrintStream console = new PrintStream(fos);
System.setOut(console);
System.out.println("This is a test.");
}
我尝试用System.out.println("message");
替换console.print("message");
,但我遇到了同样的问题。不幸的是,我已经用完了教程和论坛,我仍然无法找到解决方案。谢谢你的帮助。
答案 0 :(得分:1)
在您的代码中,您永远不会使用您创建的Format类来为输出添加日期。您应该已经创建了此类的实例,并调用新创建的实例的println()
字段的方法console
。下面是你的代码,略有修改,我想你做了你想做的事情:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class So_47900381 {
static public class Format {
private static final DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
PrintStream console = new PrintStream(System.out) {;
public void println(String x) {
Date date = new Date();
super.println("[" + sdf.format(date) + "] " + "program(" + x + ")");
}
};
}
public static void progStream() throws FileNotFoundException {
File log = new File("log" + System.currentTimeMillis() + ".txt");
PrintStream console = new PrintStream(new FileOutputStream(log));
System.out.println("Writing to " + log.getPath());
System.setOut(console);
Format fmt = new Format();
fmt.console.println("This is a test.");
}
public static void main(String[] args) {
try {
progStream();
} catch (Exception x) { x.printStackTrace(); }
}
}
但我认为没有必要在PrintStream
类内部有一个单独的字段,它是Format
的后代并用于打印到。{1}}。类本身也可以从PrintStream
下降。请看下面的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class So_47900381_1{
static public class Format extends PrintStream {
private static final DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
public Format(File file) throws FileNotFoundException {
super(file);
System.setOut(this);
}
public void println(String x) {
Date date = new Date();
super.println("[" + sdf.format(date) + "] " + "program(" + x + ")");
}
}
public static void progStream() throws FileNotFoundException {
File log = new File("log" + System.currentTimeMillis() + ".txt");
System.out.println("Writing to " + log.getPath());
Format fmt = new Format(log); // redirects the output to the file
System.out.println("This is a test."); // now it's written to the file
}
public static void main(String[] args) {
try {
progStream();
} catch (Exception x) { x.printStackTrace(); }
}
}
是的,请查看log4j
和/或google查看java logging
。
答案 1 :(得分:0)
我认为这就是你想要实现的目标:
height:100vh;
PS。:如果你真的想记录东西,我建议你考虑像log4j这样的日志框架。
PS。 2:import java.lang.*;
import java.io.*;
import java.util.*;
import java.text.*;
public class HelloWorld {
public static void main(String[] args) throws IOException {
PrintStream console = new PrintStream(System.out);
PrintStream file = new PrintStream(new FileOutputStream(new File("log" + System.currentTimeMillis() + ".txt")));
Format format = new Format();
// console
format.print("bla", console);
// file
format.print("bla", file);
}
}
public class Format {
private static final DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
public void print(String x, PrintStream stream) {
Date date = new Date();
stream.println("[" + sdf.format(date) + "] " + "program(" + x + ")");
}
}
似乎不太好主意,因为您的standard output将被重定向到该文件。
我希望我的回答可以帮助你:)