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

时间:2014-02-14 14:54:33

标签: java arguments exe

我想运行一个接受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);

知道我可能做错了吗?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

看看Tutorial并查看它是否符合您的需求。 如果是这样,请查看此Question,了解如何从命令中捕获结果Process的输出流。

如果要求使用ProcessBuilder,请查看ProcessBuilder的{​​{3}}上的示例。它准确地显示了你想要的东西。

答案 2 :(得分:0)

我终于设法完成了它:)

  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...");