无法从Java调用Perl脚本

时间:2014-11-04 20:45:40

标签: java perl

我试图从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文件。

为什么会这样?

谢谢

2 个答案:

答案 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());
}