java - java中cmd命令的输出问题

标签 java cmd

我正在尝试读取 cmd 命令(例如 dir)的结果。创建流程后,我将 BufferedReaderInputStreamReader 结合使用。出于某种原因,BufferedReader 一直是空的,即使我知道必须要读取一些输出。

这是我使用的代码:

String[] str = new String[] {"cmd.exe", "/c", 
            "cd", "c:\\",
            "dir", "/b", "/s"               
    };
    Runtime rt = Runtime.getRuntime();
    try{

        Process p = rt.exec(str);
        InputStream is =p.getInputStream();
        System.out.println(is.available());
        InputStreamReader in = new InputStreamReader(is);

        StringBuffer sb = new StringBuffer();
        BufferedReader buff = new BufferedReader(in);
        String line = buff.readLine();
        System.out.println(line);
        while( line != null )
        {
            sb.append(line + "\n");
        System.out.println(line);
            line = buff.readLine();
        }
        System.out.println( sb );
        if ( sb.length() != 0 ){
            File f = new File("test.txt");
            FileOutputStream fos = new FileOutputStream(f);
            fos.write(sb.toString().getBytes());

            fos.close();
        }
    }catch( Exception ex )
    {
        ex.printStackTrace();
    }

最佳答案

你有:

String[] str = new String[] {"cmd.exe", "/c", 
            "cd", "c:\\",
            "dir", "/b", "/s"               
    };

这对我来说似乎不对。您不能在一个命令行上向 cmd.exe 放置多个命令。那是一个批处理文件。

尝试摆脱 cd 或 dir 中的所有内容。

编辑:确实:

C:\>cmd.exe /c cd c:\ dir
The system cannot find the path specified.

关于java - java中cmd命令的输出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201513/

相关文章:

java - 如何在 XML 中设置 Spring Scope

java - 无法在 Play 项目中加载库 'libtesseract302'

Java编译器已完成但未创建可执行文件?

windows - CMD:如何递归删除文件和目录的 "Hidden"-属性

java - Gradle:为什么 sourceSets.main.output 可用,但其他输出不可用?

c# - Java 方法中允许递归调用吗?

java - 如何使用 AsynchronousFileChannel 有效地读取到 StringBuffer

c# - 执行后如何保持控制台窗口打开?

windows - 如何复制树文件夹但仅保留每个文件夹中名为 "dist"的文件夹?

java - 从命令行运行 Java 实用程序时没有足够的存储空间来处理此命令