Tôi cần một phương thức java sẽ đọc đầu ra dấu nhắc lệnh và lưu nó vào một Chuỗi để được đọc vào Java.Nhận Đầu ra Dấu nhắc Lệnh tới Chuỗi Trong Java
Đây là những gì tôi có cho đến nay nhưng không hoạt động chính xác.
public void testGetOutput() {
System.out.println("\n\n****This is the testGetOutput Method!****");
String s = null;
String query = "dir " + this.desktop;
try {
Runtime runtime = Runtime.getRuntime();
InputStream input = runtime.exec("cmd /c " + query).getInputStream();
BufferedInputStream buffer = new BufferedInputStream(input);
BufferedReader commandResult = new BufferedReader(new InputStreamReader(buffer));
String line = "";
try {
while ((line = commandResult.readLine()) != null) {
s += line + "\n";
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}//end testGetOutput()
Tôi nghĩ rằng vấn đề là khi tôi cố gắng thay đổi truy vấn thành lệnh sẽ thực thi HandBrakeCLI.exe. Nhìn vào hệ thống của tôi khi chương trình đang chạy (nhưng dường như đã tạm dừng), nó cho tôi thấy rằng HandBrakeCLI.exe đang chạy dưới một cửa sổ cmd đang được chạy theo IDE của tôi. Tất cả điều đó có ý nghĩa, nhưng HandBrakeCLI.exe không thoát, vì vậy tôi đoán đó là lý do tại sao tôi không thể đọc đầu ra làm đầu vào cho chương trình của mình.
Vì vậy, sau nền đó. Câu hỏi lớn của tôi là: Làm thế nào để có được HandBrakeCLI.exe để đóng sau khi nó kết thúc với truy vấn của tôi vì vậy tôi có thể nhận được đầu ra của nó? Chỉ cần thêm thông tin, sự khác biệt duy nhất giữa phương pháp trên và phương pháp quét DVD tôi có cho HandBrakeCLI là biến truy vấn khác nhau. Giống như ví dụ sau:
String query = "C:\Users\Kent\Desktop\HBCLI\HandBrakeCLI -t --scan -i "C:\Users\Kent\Desktop\General Conference DVDs\Sources\174th October 2004\DVD 1"; //this is actually a variable in the DVD object, but here's an example'
Oh, và bằng cách này, khi tôi chạy truy vấn rằng trong một dấu nhắc lệnh thường xuyên, nó thực hiện chính xác những gì tôi muốn nó, đem lại cho tôi tất cả các đầu ra tôi tuyệt vọng mong muốn!
Đây là vấn đề gốc (Tôi không chắc chắn làm thế nào để gửi lại một câu hỏi):
Tôi đã tìm kiếm khắp nơi và không thể hình này ra. Tôi không chắc chắn những gì tôi đã tìm thấy thậm chí có liên quan đến những gì tôi muốn làm. Tôi không có nhiều mã cho nó, vì vậy nó sẽ không làm gì nhiều để đặt mã ở đây và tôi nghĩ rằng điều này nên khá đơn giản, vì vậy tôi sẽ cung cấp cho một số ảnh chụp màn hình ở đây. Vì vậy, đây là nhiệm vụ của tôi:
thư mục Scan được đầy đủ các thư mục DVD xé (VIDEO_TS thư mục với file VOB vv) và lưu trữ các tên thư mục như tiêu đề của DVD.
Quét từng thư mục bằng HandBrakeCLI và lưu đầu ra vào chuỗi.
Chỉnh sửa chuỗi để xác định từng tiêu đề, chương và ngôn ngữ.
Tạo truy vấn để trả lại cho HandBrakeCLI để mã hóa số lượng lớn mỗi ngôn ngữ trong mỗi chương trong mỗi tiêu đề cho mỗi DVD (bạn có thể thấy lý do tại sao tôi muốn tự động hoá này!)
Lưu trữ các truy vấn trong một *. bat file
Phần duy nhất tôi không chắc chắn là bước 2! Tôi có thể làm mọi thứ khác khá dễ dàng. Tôi đã đọc rất nhiều về OutputStreams, nhưng tôi dường như không thể hiểu nó hoạt động như thế nào. Tôi thực sự chỉ cần để có được đầu ra cho một chuỗi mà tôi có thể regex để có được những thứ tôi cần.Dưới đây là ảnh chụp màn hình của những gì tôi cần phải đầu vào và những gì tôi cần phải lột từ đầu ra:
Input để HandBrakeCLI:
Output để quét:
Jarrod, cảm ơn bạn đã phản hồi nhanh! Tôi sẽ cố gắng thực hiện điều này ngay lập tức và cho bạn biết làm thế nào nó đi! – kentcdodds
Hoàn hảo! Tôi không chắc chắn nó hoạt động như thế nào. Nhưng tôi sẽ xem xét nó một chút để tìm ra. Nhưng vâng, nó hoạt động như một sự quyến rũ! Bây giờ tôi chỉ cần phải regex tất cả những thứ đó! Dù sao, cảm ơn một tấn cho sự giúp đỡ của bạn! Ồ, và tôi không chắc Maven là gì. IDE của tôi là Netbeans. Tôi không cần phải thêm các công cụ. Cảm ơn một lần nữa! –
kentcdodds