我想运行一个接受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);
知道我可能做错了吗?
答案 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...");