代码之家  ›  专栏  ›  技术社区  ›  srinannapa

运行时问题

  •  2
  • srinannapa  · 技术社区  · 14 年前

    如何在windows上工作,文件文件名.txt未创建。

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

    很明显,预期的产出是文件名.txt“应创建(C:\Documents and Settings\用户名\文件名.txt)内容为“名称”。


    即使文件文件名.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);
    }
    
    2 回复  |  直到 12 年前
        1
  •  6
  •   aioobe    14 年前

    ProcessBuilder 而不是 Runtime.exec (见 the docs

    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。。。请随意编辑此帖子!)

        2
  •  4
  •   musiKk    14 年前

    它应该与

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

    我现在没有运行Windows,所以很不幸我不能测试它。

    这背后的原因是,在您的版本中,命令在每个空格字符处被拆分。所以运行时所做的就是创建一个进程 cmd 并为它提供论据 echo , name , > filename.txt 这毫无意义。命令 echo name > filename.txt 是一个单一的论点

    exec() 仅适用于三参数版本:

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