2017-09-30 2 views
1

Ich versuche, eine runnable JAR-Datei von R, mit dem rJava-Paket ausführen. Dieses Glas hat zu schreiben und einige Dateien zu/von externen Ordnern zu lesen, die sich, wie dies in dem gleichen Weg wie die JAR-Datei sind:rJava NoSuchFileException beim Ausführen von jar aus R

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

Das Programm funktioniert gut, wenn ich es nenne durch eine Konsole in der Öffnung „mypath“ und ausführen des Glas die folgende Art und Weise:

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

Aber wenn ich versuche, diesen Code in R zu laufen, mit rjava, stürzt der Code an einem gewissen Punkt, weil es weder mypath nicht finden können/folder1 noch Mypath/Ordner2, obwohl das Arbeitsverzeichnis korrekt als "Mypath" definiert ist.

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")) 

In der Tat ist das Java-Programm genannt, es ist in der Lage, die Eingabedateien tatsächlich zu finden, die auch in mypath sind, aber aus irgendeinem Grunde stürzt ab, wenn es versucht, auf Ordner in mypath (wie folder1 und zu schreiben folder2) mit dem Fehler:

Ich habe wirklich keine Ahnung, was vor sich geht, verbrachte Stunden darauf. Fehle ich etwas wirklich offensichtlich hier?

Antwort

0

Wenn Sie Ihren Code mit Java ausführen, befinden Sie sich in mypath und die Positionen folder1 und folder2 sind in Ihrem Code sichtbar.

Vielleicht sollten Sie (als Argument) den Speicherort des Verzeichnisses übergeben und statt auf folder1 in Ihrem Java-Code zuzugreifen, sollten Sie auf den expliziten Pfad zugreifen.

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

Dann innen main, könnte man einfach offen full_path_to_your_mypath_location/some_file.txt. Wenn du R startest, bist du wahrscheinlich nicht mehr im Verzeichnis mit deinem Code. Sie können auch versuchen, das Verzeichnis

setwd(full_path_to_your_mypath_location) 
zu ändern