我的代码如下:                  Process process = null; BufferedReader br = null; String line = ""; try { process = Runtime.getRuntime().exec("ls"); br = new BufferedReader(new InputStreamReader(process
.getInputStream())); while ((line = br.readLine()) != null) {
System.out.println(line);
} process.waitFor(); } catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}执行后,没有任何输出,也没有异常当我执行  "cmd /c dir"  时没问题,正常输出请问是什么原因机器中装有 cygwin, cmd窗口下 dir , ls 都正常输出在线等 谢谢

解决方案 »

  1.   

    我又 尝试了下 touch 命令在cmd 窗口下 可以成功创建文件 在程序中 执行后 还是没有任何输出, 不知道是否执行 touch 命令, 若执行,请问创建的文件在哪里
      

  2.   

    不是在 Linux 下测试的是在 windows 下
      

  3.   

    为啥我在 cmd 中 执行 ls 不可以?以前 还真没注意到 windows  中有这个指令 
      

  4.   

    另外 lz 你的   ls 是在 cygwin 中执行的吗?  还是在 cmd  ?
      

  5.   

    window  自带这个命令吗??
      

  6.   

    楼主你看看执行cmd /c dir显示的文件是哪里的文件
      

  7.   

    cmd窗口下 dir , ls 都正常输出
    你是不是dir切换到cygwin目录下了?
      

  8.   


    cmd窗口下 dir , ls 是 都正常输出你是不是dir切换到cygwin目录下了? 是什么意思cygwin 的 bin 目录已经设置到 path 里, ls命令可以在cmd下使用
      

  9.   

    偶记得ls是linux上的命令,dos里貌似没有啊?
      

  10.   

    那是因为这个另外一个进程的输出,不会在Java进程的输出中打印的。如果需要你必须自己从Process p = ...;
    p.getInputStream()中读取
      

  11.   


    ls 确实是 linux 命令
      

  12.   

    建议你把标准输入关掉,重定向标准错误输出,详细的看一下这个:
    http://blog.csdn.net/ragic/archive/2010/05/12/5583164.aspx
      

  13.   

    lz试试指定路径访问下ls,看看能不能正常运行
      

  14.   

    我的环境和楼主一样,window7系统装有Cygwin。
    ls等命令在cmd下都可以运行。Runtime.getRuntime().exec("ls");但我用这个报错
    把命令改成"cmd /c ls",什么都不打印,process.waitFor()为1,语法错误。Runtime.getRuntime().exec("ls",new String[]{"path=C:\\cygwin\\bin"});打印的是工程路径下的目录求解释!
      

  15.   

    哪位大哥能解释一下:
    Runtime.getRuntime().exec();
    还有:
    process.waitfor();
    上面这些都是啥意思,青简单介绍一下?
    新手问一问。
      

  16.   


    按照你的建议,我改了下代码:Process process = null;

    InputStream in = null;

    InputStreamReader reader = null; BufferedReader br = null;

    String line = ""; try {

    ProcessBuilder pb = new ProcessBuilder("ls");

    pb.redirectErrorStream(true);

    process = pb.start(); process.getOutputStream().close();

    in = process.getInputStream();

    reader = new InputStreamReader(in);

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

    process.waitFor(); } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (br != null) {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }关闭了process输入流,重定向了错误输出流,却还是没有结果输出"ls" 换成 "cmd","/c","dir" 却可以,不知道为什么除了配置 cygwin 的 bin 到 path 中,还需要别的配置吗?