-1

我有一个 c++ 的可执行文件,它打开一个文件并向其中写入一行。本身工作正常。

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    ofstream fout;
    fout.open("test.txt");
    if(fout.is_open()){
        cout<<"test"<<endl;
        fout<<"Hello World!" << endl;
    }
    fout.close();
    return 0;
}

我在 java 中做了一个 main() 来从那里调用它,如下所示:

public static void main(String args[]){
        File f = new Resources().getFile("test.exe");
        System.out.println(f.exists());
        String path = f.getAbsolutePath();


        try{
            Process p = new ProcessBuilder(path).start();
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while(line != null){
                line = br.readLine();
                System.out.println(line);
            }

            p.destroy();

        }catch(Exception e){
            System.out.println(e.getMessage());
        }

    }

main 中的第一行来自我的项目,它找到了文件,它也可以工作。

问题是当 exe 单独运行时,它会创建文件并写入文件。当我运行 java main() 时,即使我从 stdout 获得输出,也不会创建文件。所以可执行文件运行但不创建文件。

我要疯了……怎么办?

4

2 回答 2

2

Process.waitFor()方法代替Process.destroy()方法。

于 2012-12-13T08:12:20.347 回答
0

这将是您可以使用的最简单的方法,但请注意它适用于您的特定简单情况。如果您的 exe 首先打印到 stderr,它将阻塞。在其他情况下,您需要 2 个线程来读取您的进程的 stdout 和 stderr 以防止阻塞。

    try
    {
        Process proc = Runtime.getRuntime().exec( "your exec here" );

        // handle process' stdout stream
        InputStream out = proc.getInputStream();
        //Thread err = proc.getErrorStream();
        BufferedReader br = new BufferedReader( new InputStreamReader( out ) );


        int exitVal = proc.waitFor();
        String line;

        while ( ( line = br.readLine() ) != null )
        {
            System.out.println( line );
        }
    }
    catch( Exception e )
    {
        System.out.println( "oops: " + e.getMessage() );
    }
于 2012-12-13T08:47:40.683 回答