1

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

しかし、rJava を使用して R でこのコードを実行しようとすると、作業ディレクトリが "mypath" として正しく定義されていても、mypath/folder1 も mypath/folder2 も見つからないため、ある時点でコードがクラッシュします。

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

私は本当に何が起こっているのか分かりません。これに何時間も費やしました。ここで本当に明らかな何かが欠けていますか?

4

1 に答える 1

0

Java を使用してコードを実行すると、内部mypathと場所folder1folder2いて、コードから見えるようになります。

おそらく、ディレクトリの場所を (引数として) 渡す必要がありfolder1、Java コードでアクセスする代わりに、明示的なパスにアクセスする必要があります。

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)
于 2017-10-02T06:48:29.637 に答える