运行Runtime.exec()不会在c ++中创建文件

时间:2012-12-13 08:05:10

标签: java c++ file-io runtime.exec

我有一个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获取输出,也不会创建该文件。所以可执行文件运行但不创建文件。

我要去坚果了......怎么办?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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() );
    }