[英]System.out to a file in java
我正在从另一个应用程序内部运行一个应用程序以进行测试。 我想将被测试应用程序的输出重定向到一个文件,这样我就可以在每次测试后都有一个日志。
有没有办法将应用程序的输出从 java 中的命令行重定向到文件?
您可以使用 Windows 命令行支持的输出流重定向器, *nix shells ,例如
java -jar myjar.jar > output.txt
或者,当您从 vm 内部运行应用程序时,您可以从 java 本身内部重定向System.out
。 您可以使用该方法
它替换了标准输出流,因此对 System.out 的所有后续调用都将转到您指定的流。 您可以在运行包装的应用程序之前执行此操作,例如调用System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("output.txt"))));
如果您使用的是无法修改的包装器,则创建您自己的包装器。 所以你有 FEST 包装器 -> 流重定向器包装器 -> 测试应用程序。
例如,您可以实现一个简单的包装器,如下所示:
public class OutputRedirector
{
/* args[0] - class to launch, args[1]/args[2] file to direct System.out/System.err to */
public static void main(String[] args) throws Exception
{ // error checking omitted for brevity
System.setOut(outputFile(args(1));
System.setErr(outputFile(args(2));
Class app = Class.forName(args[0]);
Method main = app.getDeclaredMethod("main", new Class[] { (new String[1]).getClass()});
String[] appArgs = new String[args.length-3];
System.arraycopy(args, 3, appArgs, 0, appArgs.length);
main.invoke(null, appArgs);
}
protected PrintStream outputFile(String name) {
return new PrintStream(new BufferedOutputStream(new FileOutputStream(name)), true);
}
}
您使用 3 个附加参数调用它 - 要运行的 Main 类,以及输出/错误指示。
使用此构造函数时:
new PrintStream(new BufferedOutputStream(new FileOutputStream("file.txt")));
记得将 autoflushing 设置为 true,即:
new PrintStream(new BufferedOutputStream(new FileOutputStream("file.txt")), true);
否则即使在程序完成后,您也可能会得到空文件。
是的,您可以像这样设置所需的文件。
try {
System.setOut(new PrintStream(new File("output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println() 用于在控制台上打印消息。
System 是在 java.lang 包中定义的一个类。 out 是 PrintStream 的一个实例,它是类 System 的公共和静态成员。 因为 PrintStream 类的所有实例都有一个公共方法 println()。
System.out是写入控制台的静态 PrintStream 。 我们可以使用System.setOut()方法将输出重定向到不同的 PrintStream,该方法将 PrintStream 作为参数。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class SetPrintStream {
public static void main(String[] args) throws FileNotFoundException{
System.out.println("Print on console");
// Store console print stream.
PrintStream ps_console = System.out;
File file = new File("file.txt");
FileOutputStream fos = new FileOutputStream(file);
// Create new print stream for file.
PrintStream ps = new PrintStream(fos);
// Set file print stream.
System.setOut(ps);
System.out.println("Print in the file !!");
// Set console print stream.
System.setOut(ps_console);
System.out.println("Console again !!");
}
}
Output:
Print on console
Console again !!
new file.txt will be created.
有关更多信息,请参阅我的博客:
http://javaexplorer03.blogspot.in/2016/02/how-do-i-redirect-standard-output-to.html
为了改进“vijay.shad”响应,我使用下面的代码将文件定向到 Linux 中的主目录或 Windows 中的 MyDocuments。
try {
System.setOut(new PrintStream(new File(FileSystemView.getFileSystemView()
.getDefaultDirectory().toString()
+ File.separator + "output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
File file = new File("xyz.txt");
PrintStream printStreamToFile = new PrintStream(file);
System.setOut(printStreamToFile);
System.out.println("Hello I am writing to File xyz.txt");
或者您可以使用Class FileWriter 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.