Rumah > Java > javaTutorial > ProcessBuilder lwn. Runtime.exec(): Bila Menggunakan Mana untuk Melaksanakan Perintah Luaran?

ProcessBuilder lwn. Runtime.exec(): Bila Menggunakan Mana untuk Melaksanakan Perintah Luaran?

Patricia Arquette
Lepaskan: 2024-11-17 04:49:03
asal
1009 orang telah melayarinya

ProcessBuilder vs. Runtime.exec(): When to Use Which for Executing External Commands?

Memahami Perbezaan antara ProcessBuilder dan Runtime.exec()

Apabila melaksanakan arahan luaran daripada kod Java, pembangun sering menghadapi dua kaedah biasa: Runtime.getRuntime().exec(...) dan ProcessBuilder(...).start(). Walaupun kaedah ini kelihatan serupa, ia mempunyai perbezaan utama yang boleh memberi kesan kepada pelaksanaan arahan.

Lebih Muatan dan Tokenisasi

Runtime.exec() menawarkan kedua-dua rentetan tunggal dan terlampau beban tatasusunan. Apabila menggunakan lebihan rentetan tunggal, rentetan yang dibekalkan ditandakan ke dalam tatasusunan hujah. Tingkah laku tokenisasi ini tidak digunakan pada ProcessBuilder. Pembina ProcessBuilder hanya menerima tatasusunan varargs atau senarai rentetan, dengan mengandaikan setiap rentetan mewakili hujah individu.

Kesan pada Pelaksanaan Perintah

Mari kita gambarkan perbezaan ini dengan contoh. Pada Windows, seruan Runtime.exec() berikut:

Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
Salin selepas log masuk

akan melaksanakan program "DoStuff.exe" dengan argumen "-arg1" dan "-arg2". Tokenisasi memastikan arahan itu dihuraikan dengan betul.

Sebaliknya, seruan ProcessBuilder berikut akan gagal melainkan program bernama "DoStuff.exe -arg1 -arg2" wujud dalam direktori C::

ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2");
Salin selepas log masuk

Untuk melaksanakan arahan dengan betul menggunakan ProcessBuilder, anda mesti sama ada menyediakan argumen secara berasingan:

ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2");
Salin selepas log masuk

Atau gunakan senarai:

List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
ProcessBuilder b = new ProcessBuilder(params);
Salin selepas log masuk

Implikasi untuk Pengendalian Ralat

Perbezaan dalam tokenisasi arahan boleh menjejaskan pengendalian ralat. Contohnya, jika ProcessBuilder gagal mencari atur cara yang ditentukan, anda mungkin mendapat kod ralat 1001 dan bukannya nilai keluar yang dijangkakan 0. Memahami gelagat tokenisasi Runtime.exec() dan ProcessBuilder adalah penting untuk menyahpepijat ralat tersebut.

Atas ialah kandungan terperinci ProcessBuilder lwn. Runtime.exec(): Bila Menggunakan Mana untuk Melaksanakan Perintah Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan