在一個項目中,需要用到java的pipe管道通信,並且需要用到java調用cmd命令,於是寫下了這個demo。
代碼如下:
package com.main;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import com.recive.Recive;
import com.sender.Sender;
public class Main {
public static void main(String[] args) {
Sender sender = new Sender();
Recive recive = new Recive();
PipedOutputStream po = sender.getPipedOutputStream();
PipedInputStream pi = recive.getPipedInputStream();
try {
pi.connect(po);
} catch (IOException e) {
e.printStackTrace();
}
new Thread(sender).start();
new Thread(recive).start();
}
}
package com.sender;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PipedOutputStream;
public class Sender implements Runnable {
PipedOutputStream out = null;
public PipedOutputStream getPipedOutputStream() {
out = new PipedOutputStream();
return out;
}
@Override
public void run() {
try {
String cmd = "cmd /c \"C: && cd Program Files && dir\"";
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(cmd);
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "gbk"); //gbk:解決輸出亂碼
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null){
out.write(line.getBytes());
out.flush();
Thread.sleep(100);
}
is.close();
isr.close();
br.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.recive;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PipedInputStream;
public class Recive implements Runnable {
PipedInputStream in = null;
public PipedInputStream getPipedInputStream() {
in = new PipedInputStream();
return in;
}
@Override
public void run() {
byte[] bys = new byte[1024];
try {
FileWriter fw = new FileWriter("pipe.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
while(in.read(bys) != -1) {
String str = new String(bys).trim();
System.out.println(str);
bw.write(str + "\n");
}
bw.close();
fw.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
將執行cmd命令的結果打印在控制檯並存放在一個txt文件中
參考文章:
https://blog.csdn.net/theblackbeard/article/details/54880180