2017-05-30 117 views
0

基本上我想在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(); 
+0

你能解释一下吗? Java中的新java.io.File(outputFilename)不会“做”任何事情。文件只是一个文件的表示,它们可能不存在或其中没有任何数据。 – markspace

+1

这个例子是在Scala中,而不是Java,我测试过它。有用! – pythonic

+0

至少我不知道更好的方式在java中执行它,比如在scala中('ls -l“#> new File(”my.log“))。' – prayagupd

回答

3

我想出了下面的代码。它够好吗?

这是一个主观评价。我们在这里不执行。

即使它,有没有更简单的方法呢?

使用ProcessBuilder而不是Runtime.exec()会更清洁。其中,ProcessBuilder直接支持I/O重定向。你所要做的威力则是这样的:

String [] command = new String[] { "command", "-arg1", "-arg2" }; 

Process proc = new ProcessBuilder(command) 
     .redirectOutput(new File(outputFileName)) 
     .start(); 

除了是短和清洁,这大概也是更有效的,因为这个过程的输出将直接进入指定的文件,而不必是读入Java并写回。

相关问题