予有需要這樣過程需要重定向輸入
prog.exe < foo.txt的要饋送的參數的UNIX本地可執行。
foo.txt的有兩條線: 酒吧 巴茲
我使用java.lang.ProcessBuilder中執行此命令。不幸的是,prog.exe只能使用來自文件的重定向。有什麼方法可以模仿Java中的這種行爲嗎?
當然,
ProcessBuilder pb = new ProcessBuilder("prog.exe", "bar", "baz");
不起作用。
謝謝!
予有需要這樣過程需要重定向輸入
prog.exe < foo.txt的要饋送的參數的UNIX本地可執行。
foo.txt的有兩條線: 酒吧 巴茲
我使用java.lang.ProcessBuilder中執行此命令。不幸的是,prog.exe只能使用來自文件的重定向。有什麼方法可以模仿Java中的這種行爲嗎?
當然,
ProcessBuilder pb = new ProcessBuilder("prog.exe", "bar", "baz");
不起作用。
謝謝!
ProcessBuilder pb = new ProcessBuilder("prog.exe");
Process p = pb.start();
OutputStream pos = p.getOutputStream();
InputStream fis = new FileInputStream("file.txt");
byte[] buffer = new byte[1024];
int read = 0;
while((read = fis.read(buffer)) != -1) {
pos.write(buffer, 0, read);
}
fis.close();
未經測試,但類似這樣的應該工作。
您是否嘗試將prog.exe
包裝爲接受參數並處理prog.exe
的腳本? 我假設你使用的是shell,所以設置bash腳本非常簡單。
如果我理解你的問題,腳本會是什麼樣子:
#!/usr/bin/bash
echo $1 > file
echo $2 >> file
prog.exe < file
remove file
這將是罰款,但這樣做的關鍵是從端口UNIX到Windows。所以我不會在新平臺上有一個shell。 – initialZero 2010-06-03 21:34:26
重定向是建立你所需要手動待辦事項這個殼,這樣的事情:
Process proc = pb.start();
OutputStreamWriter os = new OutputStreamWriter(proc.getOutputStream());
// then write the data from your file to os
// ...
os.close();
使用ProcessBuilder
構建過程,然後使用process.getOutputStream()
獲取將流水到流程的標準輸入的OutputStream。
打開使用普通的Java技術文件,讀取文件的內容,並將其寫入OutputStream
要你與ProcessBuilder
製造的過程。
你現在的問題是,我們在調用ProcessBuilder
推出
$ prog.exe foo bar
這可能是沒有接近你想要達到的目標。
我最終做了這樣的事情,它的工作原理。感謝所有的幫助!
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;
public class UserInp {
public static void main(String[] args) {
new UserInp().sample();
}
public void sample() {
String command = "foo.exe";
List<String> args = new LinkedList<String>();
args.add("bar");
args.add("baz");
ProcessBuilder pb = new ProcessBuilder(command);
java.lang.Process process = null;
try {
process = pb.start();
} catch (IOException ex) {
//--
}
OutputStream os = process.getOutputStream();
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(os)));
final InputStream is = process.getInputStream();
new Thread(new Runnable() {
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (java.io.IOException e) {
}
}
}).start();
for (String arg : args) {
pw.println(arg);
}
pw.close();
int returnCode = -1;
try {
returnCode = process.waitFor();
} catch (InterruptedException ex) {
//--
}
System.out.println(returnCode);
}
}
在我的情況(JDK 6)中,我必須使用帶有File的InputStream構造函數。帶路徑的字符串沒有爲我工作。謝謝馬克。例如:InputStream fis = new FileInputStream(new File(「/ Path/to/file.txt」)); – tremendows 2013-04-08 07:55:18