我有一个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获取输出,也不会创建该文件。所以可执行文件运行但不创建文件。
我要去坚果了......怎么办?
答案 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() );
}