0

我想将“dir”命令的结果输出到 java 控制台。我已经看过谷歌和这里,但没有一个例子适合我,因此让我写这篇文章。

我的代码如下:

try
    {
        System.out.println("Thread started..");
        String line = "";
        String cmd = "dir";

        Process child = Runtime.getRuntime().exec(cmd);

        //Read output
        BufferedReader dis = new BufferedReader( new InputStreamReader(child.getInputStream() ));

        while ((line = dis.readLine()) != null)
        {
            System.out.println("Line: " + line);
        }

        dis.close();

    }catch (IOException e){

    }

我究竟做错了什么?

任何帮助都会非常好。

提前致谢,

达里尔

4

5 回答 5

3
  1. 您不能将“dir”作为进程运行,您需要将其更改为String cmd = "cmd dir";.
  2. 你根本不处理异常。在 catch 块中添加该行将e.printStackTrace());告诉您我在 (1) 中写的内容。永远不要忽略异常!
  3. 您不处理错误流。这可能会导致您的程序挂起、处理错误流并使用不同的流并行读取两个流(错误和输入)。
于 2011-04-25T22:21:10.763 回答
1

最好的方法是使用 commons exec http://commons.apache.org/exec/

这有一些可以真正让你陷入困境的怪癖,例如如果你没有清除其输出流,则整个进程阻塞,在命令中转义引号等。

这是一种可以在 windows 中成功运行 del 命令的方法。请注意 cmd 的使用,因为 del 不是独立的可执行文件:

private void deleteWithCmd(File toDelete) throws IOException {
    CommandLine cmdLine = new CommandLine("cmd.exe");
    cmdLine.addArgument("/C");
    cmdLine.addArgument("del");
    cmdLine.addArgument(toDelete.getAbsolutePath());
    DefaultExecutor executor = new DefaultExecutor();
    int exitValue = executor.execute(cmdLine);
}
于 2012-06-03T12:33:20.703 回答
0
  • a) 什么是 java 控制台?
  • b) 您应该使用 javas File.listFiles () 而不是 Runtime.exec,后者不可移植,并且使得名称拆分成为必要 - 对于包含空格、空格、换行符等的文件名来说,这是一件困难的事情。
  • c) 你的代码有什么问题?
  • d) 为什么在异常的情况下你不做任何事情?
于 2011-04-25T22:29:04.877 回答
0

这是一个更详尽的示例,说明了操作系统版本和错误条件(如上面 MByD 所述)

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4

请记住,使用“exec”意味着您的应用程序不再是跨平台的,并且失去了 Java 的主要优势之一。

更好的方法是使用 java.io 包。

http://download.oracle.com/javase/tutorial/essential/io/dirs.html

于 2011-04-25T22:32:19.003 回答
0

您也可以在 java 6 中执行类似的操作:

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class ListFilesFromRegExp {

    public static void main(String[] args) throws IOException {
        File dir = new File("files/");
        File[] files = dir.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.matches("File[0-9].c");
            }
        });
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].getAbsolutePath());
        }
    }
}
于 2013-12-13T10:18:19.177 回答