使用 Runtime.getRuntime() 执行命令时,Java 应用程序不从文件中读取

标签 java runtime filereader

我有一个 Java 应用程序,它使用 Runtime.getRuntime.exec("command"); 执行命令,然后它生成一个文件,我需要读取该文件来查找字符串,到目前为止一切正常。

问题是程序在执行命令后找不到给定的字符串,但是如果我在运行后注释掉行 Runtime.getRuntime.exec("command");应用程序第一次运行并进一步运行并创建文件,它可以正确找到字符串。似乎 getRuntime() 由于某种原因停止了 fileReader 的工作。有人知道解决这个问题吗?

public static void main(String[] args) throws IOException{

    String[] command = new String[3];
    command[0] = "cmd.exe";
    command[1] = "/c";
    command[2] = "C:\\Users\\kjdah\\Desktop\\handle.exe -a > C:\\Users\\kjdah\\Desktop\\handles.txt";

    Runtime.getRuntime().exec(command);

    String toFind = "##?#USB#VID_04F2&PID_B2E1&MI_00#6&9f9977c&0&0000#";
    File file = new File("C:\\Users\\kjdah\\Desktop\\handles.txt");

    boolean found = false;
    String strLinePid = null;

    try {
        FileReader fstream = new FileReader(file);
        BufferedReader buffer = new BufferedReader(fstream);
        String strLine;

        while ((strLine = buffer.readLine()) != null)   {

            if(strLine.contains("pid:")){
                strLinePid = strLine;
            }

            if(strLine.contains(toFind)){
                found = true;
                break;
            }
        }

        buffer.close();
        fstream.close();

    }
    catch (Exception e){
        System.err.println("An error happened: " + e.getMessage());
        e.printStackTrace();
    }

`

最佳答案

Runtime#exec创建一个并发运行的新进程。您必须等待它完成才能处理其结果。

这可以使用方法 Process#waitFor 来完成Runtime#exec 返回的Process。此外,最好检查该过程是否成功。看看Javadoc of Process了解更多信息。

关于使用 Runtime.getRuntime() 执行命令时,Java 应用程序不从文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40201784/

相关文章:

java - 在同一个包中导入类

java - 两个do while循环

java - GWT 运行时依赖项

java - 从文件中读取文本并进行更正(逗号和点)[Java]

java - 类似但不同类型消息的数据包组织

java - google-guava MapMaker .softValues() - 值没有得到 GC-ed,OOME : HeapSpace follows

javascript - 在 Chrome 中加载文件时,FileReader readyState 停留在 1

java:分别读取同一行中的元素

python - 在 pyqt 中显示运行时输出

c++ - 独立 VS 2010 C++ 程序