繁体   English   中英

使用java程序中的参数运行exe文件并将输出发送到文本文件

[英]Running exe file with arguments from java program and sending output to text file

我想运行一个接受mp3文件作为参数的exe文件,并将输出重定向到文本文件。

我在命令提示符下使用以下命令,并且运行正常并在我的二进制文件夹中生成log.txt文件但是我无法通过java执行此操作。

    C:\Users\Desktop\binary>codegen.exe kalimba.mp3 > log.txt

我已经尝试过ProcessBuilder类但是看不到二进制文件夹中的log.txt

 File f = new File("C:/Users/Desktop/binary");
ProcessBuilder pb = new ProcessBuilder("cmd", "/c","start","codegen.exe", "kalimba.mp3", "log.txt");
pb.directory(f);

知道我可能做错了什么吗?

您应该使用ProcessBuilder本身将输出重定向到文件。 具体来说, redirectOutput(File)方法:

final File outFile = new File(...);
pb.redirectOutput(outFile);

使用> (在cmd以及Unix shell中)的重定向由命令解释器/ shell处理。

我建议使用Apache的Commons Exec作为替代方案。 它非常直观,易于使用,而且对不同平台友好。

看看教程 ,看看它是否适合您的需求。 如果是这样,请查看此问题,了解如何从命令中捕获生成的Process的输出流。

如果需要使用ProcessBuilder ,请查看ProcessBuilder 文档页面上的示例。 它显示了你想要的。

我终于成功完成了:)

  ProcessBuilder pb = new ProcessBuilder("C:/Users/Desktop/binary/codegen.exe", "C:/Users/Desktop/binary/Kalimba.mp3");

Process process = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process .getInputStream())); 
FileHandler fh = new FileHandler("D:/log.txt");
Logger logger = Logger.getLogger("global");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
String line = null;
while ((line = stdInput.readLine()) != null) {
    logger.log(Level.INFO, line);
}
System.out.println("Logging Completed...");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM