2

如何使它在 windows 上工作,文件 filename.txt 没有被创建。

Process p = Runtime.getRuntime().exec("cmd echo name > filename.txt");

显然,预期的输出是应该创建一个“filename.txt”(C:\Documents and Settings\username\filename.txt),内容为“name”。


能够使用以下代码进行管理,即使文件是“filename.txt”不是使用 processBuilder 创建的

       Runtime runtime = Runtime.getRuntime();
       Process process = runtime.exec("cmd /c cleartool lsview");
       // Directly to file

//Process p = Runtime.getRuntime().exec( 
//              new String[] { "cmd", "/c", "cleartool lsview > filename.txt" },null, new File("C:/Documents and Settings/username/")); 

       InputStream is = process.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       BufferedReader br = new BufferedReader(isr);
       String line;

       System.out.printf("Output of running %s is:", 
           Arrays.toString(args));

       while ((line = br.readLine()) != null) {
         System.out.println(line);
       }

或者,使用 ProceessBuilder ,

Process process = new ProcessBuilder( "cmd", "/c", "cleartool lsview" ).start();
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));

System.out.printf("Output of running %s is:", Arrays.toString(args));

String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}
4

2 回答 2

6

您实际上应该使用ProcessBuilder而不是Runtime.exec(请参阅文档)。

ProcessBuilder pb = new ProcessBuilder("your_command", "arg1", "arg2");
pb.directory(new File("C:/Documents and Settings/username/"));

OutputStream out = new FileOutputStream("filename.txt");
InputStream in = pb.start().getInputStream();

byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
    out.write(buf, 0, len);

out.close();

(如果我有一台 Windows 机器,我会将其调整为 cmd 和 echo ......请随意编辑这篇文章!)

于 2010-09-23T11:08:49.507 回答
4

它应该与

Process p = Runtime.getRuntime().exec(
    new String[] { "cmd", "/c", "echo name > filename.txt" });

我目前没有运行 Windows,所以很遗憾我无法对其进行测试。

这背后的原因是,在您的版本中,命令在每个空格字符处被拆分。因此,运行时所做的是创建一个进程cmd并为其提供参数echo, name>filename.txt这没有任何意义。该命令echo name > filename.txtcmd进程的单个参数,因此您必须手动提供具有不同参数的数组。

如果要确保在特定文件夹中创建文件,则必须提供一个工作目录,exec()该目录仅适用于三个参数版本:

Process p = Runtime.getRuntime().exec(
    new String[] { "cmd", "/c", "echo name > filename.txt" },
    null, new File("C:/Documents and Settings/username/"));
于 2010-09-23T11:08:13.100 回答