3

我正在尝试使用 cmd.exe 在特定目录中搜​​索文件,然后在 java 程序中显示路径并将其写入文件。问题是该过程永远不会终止。

这是我的代码:

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

            Runtime rt = Runtime.getRuntime();
            try{

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


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

            }catch( Exception ex )
            {
                ex.printStackTrace();
            }
4

4 回答 4

1

请试试

cmd /c

而不是简单地

cmd

参考

于 2010-02-04T15:12:25.690 回答
1

Runtime.exec不能那样工作。您不能将这样的多个命令传递给 cmd.exe。

Runtime.exec允许您使用参数列表执行单个进程。它不提供任何“shell”操作(2>&1例如)。您必须使用输入/输出流自己进行这种 IO 重定向。

这类似于调用另一个程序的main函数。

你可以试试 `Runtime.exec(new String[] { "cmd.exe", "/c", "dir", "C:\\" });

但实际上,如果您想要文件列表,最好使用java.io.File类中的工具,这将不依赖于操作系统的特定功能。

于 2010-02-04T15:22:43.453 回答
0

为什么不使用Java进行目录遍历而不是调用外部shell命令?它使您的代码不可移植!

于 2010-02-05T00:58:40.723 回答
0

在启动命令之前,除了带有 /C 或 /K 开关的 cmd.exe 进程之外,您还必须使用启动命令。示例:要在 bash 控制台(来自 mingw 项目)中转换 Windows 的命令解释器,您必须使用命令 "C:\Windows\System32\cmd.exe /C start C:\mingw\ 调用 Runtime 类的 exec 方法msys\1.0\bin\bash.exe”(我使用外部命令而不是内部命令,因为它更重要,但您可以使用 DIR 等内部命令)。

于 2014-01-30T16:44:36.953 回答