我试图从Java调用Perl脚本但看起来我无法做到。
这是我创建文件的Perl脚本。这是一个简单的脚本。
use strict;
use warnings;
open(my $fh, '>', 'report.txt');
print $fh "My first report generated by perl\n";
close $fh;
print "done\n";
这是我在上面调用Perl脚本的Java代码。
package perlfromjava;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class PerlFromJava {
public static void main(String[] args) {
try {
String command = "perl $HOME/Documents/hello.pl";
System.out.println(command);
Process proc = Runtime.getRuntime().exec(command);
} catch (IOException ex) {
Logger.getLogger(PerlFromJava.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
当我从命令运行Perl scrip时,它工作正常但是当我从Java调用Perl脚本时,没有创建report.txt文件。
为什么会这样?
谢谢
答案 0 :(得分:1)
您不能使用Java Runtime
中的$ HOME变量。在Java中,您可以使用System.getenv("HOME")
或跨平台System.getProperty(String)
来获取它,例如
String command = "perl " + System.getProperty("user.home")
+ "/Documents/hello.pl";
可用的System Properties列表包含在Java教程中。
修改强>
不要忘记等待Process
完成,
try {
Process proc = Runtime.getRuntime().exec(command);
proc.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
答案 1 :(得分:1)
实际上你的代码正在运行。但问题是perl创建的文件是在你运行java文件的地方生成的。如果你正在使用ide,那么肯定会在该项目文件夹中创建文件。如果你搜索&#34 ; REPORT.TXT"你会发现file.to了解你的perl脚本改为
use strict;
use warnings;
open(my $fh, '>', 'C:/Users/Madhawa.se/Desktop/js/report.txt');
print $fh "My first report generated by perl\n";
close $fh;
print "done\n";
intead给report.txt提供了完整的路径,你想在perl脚本中创建report.txt文件。看看它是否有效。
try {
String command = "perl C:\\Users\\Madhawa.se\\Desktop\\js\\mm.pl";
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
if (process.exitValue() == 0) {
System.out.println("Command Successful");
} else {
System.out.println("Command Failure");
}
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
}