我正在从另一个应用程序中运行一个应用程序用于测试目的.我想将测试应用程序的输出重定向到文件,因此我可以在每次测试后都有一个日志.
有没有办法将应用程序的输出从java中的命令行重定向到文件?
mdm*_*dma 76
您可以使用Windows命令行支持的输出流重定向器,例如*nix shell
java -jar myjar.jar > output.txt
Run Code Online (Sandbox Code Playgroud)
或者,当您从虚拟机内部运行应用程序时,您可以System.out从java本身重定向.您可以使用该方法
它取代了标准输出流,因此对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);
}
}
Run Code Online (Sandbox Code Playgroud)
您使用另外3个参数调用它 - 要运行的Main类,以及输出/错误指示.
小智 46
使用此构造函数时:
new PrintStream(new BufferedOutputStream(new FileOutputStream("file.txt")));
记得将autoflushing设置为true,即:
new PrintStream(new BufferedOutputStream(new FileOutputStream("file.txt")), true);
否则,即使程序完成,您也可能会得到空文件.
vij*_*had 27
是的,您可以像这样设置所需的文件.
try {
System.setOut(new PrintStream(new File("output-file.txt")));
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
小智 9
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.
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅我的博客
http://javaexplorer03.blogspot.in/2016/02/how-do-i-redirect-standard-output-to.html
小智 7
为了改进"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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85759 次 |
| 最近记录: |