java線程通信pipe管道結合java調用cmd命令

在一個項目中,需要用到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

https://blog.csdn.net/sec_root/article/details/52623586

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章