1

尊敬的先生/女士,

我有一个fortran exe,它接受输入文件并通过对输入文件进行一些操作来生成输出文件。我能够在linux终端中运行该命令。(我认为fortran编译器在linux中可用)。现在请建议如何运行这个使用 java 的 fortran 可执行文件(在 Linux 机器中)。

我尝试的是,

 String cmd="fortranExe arg1 arg2";
 //fortranExe=exe path
 //arg1,arg2 are arguments to fortran executable program
 Process p=Runtime.getRuntime().exec(cmd); 

但是我没有得到输出。当我尝试运行 ls 等 Linux 命令时,dir 给出了输出。在 java 中运行 fortran 代码需要什么吗?

4

3 回答 3

1

尝试使用这样的东西

Process process = new ProcessBuilder("C:\\PathToExe\\fortran.exe","param1","param2").start();

从那里得到这个

Java编程:从Java调用exe并传递参数

有关 ProcessBuilder 的更多信息:http: //docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

于 2012-06-26T08:15:57.067 回答
1

不,如果它是您运行 JVM 的平台的常规二进制文件,那应该没关系。

当您从控制台运行时,您是如何运行二进制文件的?

成功生成进程后,您可以像这样读取其标准输出:

BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));

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

如果执行该进程时出现任何运行时问题,例如没有运行二进制文件的权限等,则 process.exitValue() 将返回 127。

编辑:看到其他评论,我可以看到您正在使用重定向输入/输出到您的二进制文件。

所以实际上没有参数,但是你需要打开 InputFileName.txt 并使用 process.getOutputStream() 对象来写入你的进程。无需设置 OutputFilename.txt,因为您从 InputStream 读取输出,如有必要,您可以自己将其写入文件。

这个答案详细解释了它:

https://stackoverflow.com/a/3644288/435583

https://stackoverflow.com/a/6796053/435583

干杯,

于 2012-06-26T08:26:59.640 回答
0

除了使用 Runtime 之外,更简洁的方法是使用JNA请在此处查看 Fortran的具体示例。

您甚至可以直接从 Java 调用 Fortan 程序的子例程等各个部分。JNA通常用于调用 C/C++ 程序,并且通常适合这种类型的用例,我猜你的用例在这里很合适。

于 2012-06-26T08:27:51.420 回答