2012-02-19 56 views
5

Tôi có một vấn đề nhỏ khi thực hiện một công cụ dòng lệnh. Tôi muốn thực thi UnRAR.exe từ WinRAR. Tôi làm như sau:Java thực thi chương trình dòng lệnh

Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile()); 

Vấn đề của tôi là tệp nén được bảo vệ bằng mật khẩu. Nếu tôi thực hiện lệnh trong giao diện điều khiển của tôi, tôi được yêu cầu nhập mật khẩu. Nếu tôi để Java thực thi nó, chương trình chỉ kết thúc và không bao giờ chờ đợi một đầu vào của người dùng (mật khẩu).

Tôi đã cố gắng ghi vào luồng đầu ra của quá trình nhưng điều đó không hoạt động. Có điều gì tôi cần biết về hành vi của các chương trình dòng lệnh được thực hiện trong các môi trường "khác nhau" không?

EDIT: Có thể tôi chưa đủ rõ ràng. Câu hỏi của tôi là: Có thể tương tác với một chương trình dòng lệnh bằng Java không?

+0

tôi thêm câu trả lời mới và xóa cũ. Tôi hy vọng câu trả lời mới sẽ làm hài lòng bạn. – Kamil

Trả lời

10

Làm việc cho tôi. Có lẽ bạn đã không viết một dòng mới và tuôn ra dòng?

Process tr = Runtime.getRuntime().exec(new String[]{ "cat" }); 
Writer wr = new OutputStreamWriter(tr.getOutputStream()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(tr.getInputStream())); 
wr.write("hello, world\n"); 
wr.flush(); 
String s = rd.readLine(); 
System.out.println(s); 

http://ideone.com/OUGYv

+1 cho câu hỏi của bạn, java.lang.Process là những gì tôi đang tìm kiếm!

0

Có vài phương pháp để chạy quy trình và tương tác với nó.

Process lớp bằng java. Nó cho phép để có được tất cả 3 dòng của subprocess (quá trình được gọi là bởi ứng dụng java của bạn).

Process lớp trong java giúp đỡ: link

Ở đây bạn có thể tìm thấy vài ví dụ về mã, mà thực hiện quá trình trong java: link

Tuy nhiên dữ liệu từ đầu ra và lỗi suối sẽ có sẵn cho bạn sau khi quá trình kết thúc (chương trình của bạn sẽ bị "ngừng" cùng với phương thức .exec() cho đến khi tiến trình con kết thúc).

Để tương tác với quy trình đang chạy, bạn phải sử dụng một chuỗi khác.

Using a thread to capture process output

Interacting with another process Java

Các vấn đề liên quan