如何在Java中执行命令并将其输出重定向到文件
问题描述:
基本上我想在Java中执行以下Scala代码的等效操作。如何在Java中执行命令并将其输出重定向到文件
command #> new java.io.File(outputFileName) !
或者等效于Python中的以下内容。
os.system(command + " > " + outputFileName)
我想出了以下代码。它够好吗?即使这样,有没有更简单的方法呢?
String [] Command = new String[...];
Command[0] = ...
Command[1] = ...
...
Process proc = Runtime.getRuntime().exec(Command);
BufferedReader br = new BufferedReader(new InputStreamReader (proc.getInputStream()));
String line;
PrintWriter pw = new PrintWriter(outputFileName);
while ((line = br.readLine()) != null)
pw.write(line);
pw.close();
答
我想出了下面的代码。它够好吗?
这是一个主观评价。我们在这里不执行。
即使它,有没有更简单的方法呢?
使用ProcessBuilder
而不是Runtime.exec()
会更清洁。其中,ProcessBuilder
直接支持I/O重定向。你所要做的威力则是这样的:
String [] command = new String[] { "command", "-arg1", "-arg2" };
Process proc = new ProcessBuilder(command)
.redirectOutput(new File(outputFileName))
.start();
除了是短和清洁,这大概也是更有效的,因为这个过程的输出将直接进入指定的文件,而不必是读入Java并写回。
你能解释一下吗? Java中的新java.io.File(outputFilename)不会“做”任何事情。文件只是一个文件的表示,它们可能不存在或其中没有任何数据。 – markspace
这个例子是在Scala中,而不是Java,我测试过它。有用! – pythonic
至少我不知道更好的方式在java中执行它,比如在scala中('ls -l“#> new File(”my.log“))。' – prayagupd