【问题标题】:rJava NoSuchFileException when running jar from R从 R 运行 jar 时出现 rJava NoSuchFileException
【发布时间】:2018-03-12 05:31:57
【问题描述】:

我正在尝试使用 rJava 包从 R 运行可运行的 JAR 文件。这个 jar 必须向/从外部文件夹写入和读取一些文件,这些文件与 jar 文件本身在同一路径中,如下所示:

mypath/myjar.jar
mypath/folder1
mypath/folder2
mypath/input_file1.txt
mypath/input_file2.txt

如果我通过在“mypath”中打开控制台并按以下方式运行 jar 来调用该程序,则该程序可以正常工作:

java -jar myjar.jar input_file1.txt input_file2.txt false

但是当我尝试在 R 中使用 rJava 运行这段代码时,代码会在某个时候崩溃,因为它既找不到 mypath/folder1 也找不到 mypath/folder2,即使工作目录被正确定义为“mypath ”。

jinit(".",force.init=TRUE) # this starts the JVM
.jaddClassPath("myjar.jar")
jobject <- .jnew("package_name/Main")  ## call the constructor

result_java <- rJava::.jcall(obj = jobject, returnSig = "V", method = "main", c("input_file1.txt","input_file2.txt","false"))

事实上,调用java程序,它确实能够找到也在mypath中的输入文件,但由于某种原因,当它尝试写入mypath中的文件夹(例如folder1和folder2)时崩溃了错误:

Error executing task java.nio.file.NoSuchFileException: folder1/some_file.txt

我真的不知道发生了什么,花了几个小时在这上面。我在这里遗漏了一些非常明显的东西吗?

【问题讨论】:

    标签: java r path rjava nosuchfileexception


    【解决方案1】:

    当您使用 Java 运行代码时,您位于 mypath 内部,并且位置 folder1folder2 对您的代码可见。

    也许,您应该传递(作为参数)目录位置,而不是在 Java 代码中访问 folder1,而应该访问显式路径。

    result_java <- 
       rJava::.jcall(
         obj = jobject, 
         returnSig = "V", 
         method = "main",
           c( 
             "input_file1.txt",
             "input_file2.txt",
             "false",
             "full_path_to_your_mypath_location"))
    

    然后,在main 中,您可以简单地打开full_path_to_your_mypath_location/some_file.txt。当您启动 R 时,您可能不再在您的代码所在的目录中。也可以试试换目录

    setwd(full_path_to_your_mypath_location)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2010-11-28
      • 2016-10-10
      • 2014-07-21
      • 2010-12-01
      相关资源
      最近更新 更多