Saya sedang menulis program di java yang akan mengeksekusi winrar dan unzip file jar untuk saya yang ditempatkan di h:\myjar.jar
ke dalam folder h:\new
. Kode java saya seperti ini
import java.io.File;
import java.io.IOException;
public class MainClass {
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
Process p = null;
try {
File dir = new File("C:/Program Files/WinRAR");
p = r.exec("winrar x h:\\myjar.jar *.* h:\\new", null, dir);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ketika saya mengeksekusi ini, saya mendapatkan kesalahan ini
java.io.IOException: Cannot run program "winrar" (in directory "C:\Program Files\WinRAR"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at MainClass.main(MainClass.java:16)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 4 more
Adakah yang bisa memberi tahu saya mengapa saya mengalami masalah seperti itu. Apa perubahan yang perlu saya masukkan dalam kode agar bisa berfungsi?
Dengan asumsi bahwa winrar.exe
ada di PATH
, maka Runtime.exec
mampu menemukannya, jika tidak, Anda perlu menyediakan jalur yang sepenuhnya memenuhi syarat untuk itu, misalnya, dengan asumsi winrar.exe
diinstal di C:/Program Files/WinRAR
, Anda perlu menggunakan sesuatu seperti ...
p=r.exec("C:/Program Files/WinRAR/winrar x h:\\myjar.jar *.* h:\\new");
Secara pribadi, saya akan merekomendasikan Anda untuk menggunakan ProcessBuilder
karena memiliki beberapa kemampuan konfigurasi tambahan di antara hal-hal lainnya. Jika memungkinkan, Anda juga harus memisahkan perintah dan parameter Anda ke dalam elemen String
yang terpisah, ini menangani hal-hal seperti spasi jauh lebih baik daripada variabel String
tunggal, misalnya ...
ProcessBuilder pb = new ProcessBuilder(
"C:/Program Files/WinRAR/winrar",
"x",
"myjar.jar",
"*.*",
"new");
pb.directory(new File("H:/"));
pb. redirectErrorStream(true);
Process p = pb.start();
Jangan lupa untuk membaca isi InputStream
dari proses, karena jika tidak melakukannya, proses akan terhenti.
dir
yang Anda tentukan adalah direktori kerja dari proses yang sedang berjalan - tidak membantu untuk menemukan executable. Gunakan cmd /c winrar ...
untuk menjalankan proses mencari executable di PATH atau cobalah untuk menggunakan absolute path ke winrar.