Java memang memiliki pustaka sendiri, baik yang native terhadap suatu sistem operasi maupun yang bersifat OS independent, namun kebutuhan untuk menjalankan fungsi eksternal suatu OS kadang tetap dibutuhkan.
Salah satu fungsi yang bisa digunakan adalah Runtime.exec yang bisa dimanfaatkan untuk melakukan encapsulasi perintah dari bash shell (terminal) pada Linux.
Sebagian programmer mungkin berargumen, mengapa mesti menggunakan perintah bash untuk melakukan suatu pekerjaan, padahal sebagian fungsi tersebut sudah tersedia pada pustaka Java. Jawabnya, ada banyak hal yang bisa kita lakukan dengan menjalankan suatu perintah secara langsung tanpa menggunakan pustaka.
Contohnya adalah konfigurasi pada email server postfix. Email server postfix mendukung perintah postconf -e item_konfigurasi=pilihan_konfigurasi. Dengan melakukan encapsulasi perintah tersebut, kita bisa membuatkan front-end GUI yang mempermudah proses instalasi postfix.
Ide ini muncul setelah saya membuat skrip sederhana untuk otomatisasi install postfix pada SuSE Linux.
Berikut adalah kode sederhana untuk menjalankan perintah shell pada program Java.
try {
// Execute a command without arguments
String command = "ls";
Process child = Runtime.getRuntime().exec(command);
// Execute a command with an argument
command = "ls /tmp";
child = Runtime.getRuntime().exec(command);
} catch (IOException e) {
}
Jika argumen memiliki spasi, kita bisa melakukan overload agar perintah dan argumennya dikirim dalam bentul array, seperti contoh berikut :
try {
// Execute a command with an argument that contains a space
String[] commands = new String[]{"grep", "hello world", "/tmp/f.txt"};
commands = new String[]{"grep", "hello world", "c:\\Documents and Settings\\f.txt"};
Process child = Runtime.getRuntime().exec(commands);
} catch (IOException e) {
}
Contoh lain adalah menjalankan suatu class dengan argumen dan menampilkan hasilnya. Lihat contoh kode berikut :
import java.io.*;
public class ProcTest
{
public static void main(String args[]) throws IOException
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(args);
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(br.ready())
{
System.out.println(br.readLine());
}
}
}
Compile dan jalankan dengan perintah java ProcTest ls.
Semoga bermanfaat.