創建一個橋樑來與從shell腳本啓動的Java進程通信。喜歡的東西下面:
startreader.sh
#!/bin/bash
echo "" > inputbridge.txt
tailf inputbridge.txt | java SampleRead
SampleRead.java
import java.util.Scanner;
public class SampleRead {
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
int readValue = 0;
while((readValue = scanner.nextInt()) != 5) {
System.out.println("Send me something other than " + readValue);
}
System.out.println("Good job. Bye");
}
}
NumberGenerator.java
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class NumberGenerator {
public static void main(String [] args) throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder("./startreader.sh");
Process process = processBuilder.start();
Scanner processStreamReader = new Scanner(process.getInputStream());
String processInputString = null;
do {
try(FileWriter fileWriter = new FileWriter("inputbridge.txt", true)) {
fileWriter.write(((int)(Math.random() * ((10 - 1) + 1)) + 1) + "\n");
} catch(IOException e) {
e.printStackTrace();
}
processInputString = processStreamReader.nextLine();
System.out.println(processInputString);
} while(processInputString.startsWith("Send me something other than"));
}
}
個
步驟來運行:
- 編譯
SampleRead.java
和NumberGenerator.java
- 提供
startreader.sh
- 運行
java NumberGenerator
輸出
[[email protected] java]$ java NumberGenerator
Send me something other than 1
Send me something other than 6
Send me something other than 8
Send me something other than 4
Good job. Bye
[[email protected] java]$ cat inputbridge.txt
1
6
8
4
5
執行權限
這是如何工作: 橋的NumberGenerator
和SampleRead
之間是通過startreader.sh
產生inputbridge.txt
文件。當NumberGenerator
運行時,它會執行startreader.sh
,它會生成inputbridge.txt
並清空它。 startreader.sh
的下一個階段是在inputbridge.txt
文件上做tailf
。寫入此文件的任何新行將通過tailf
進程成爲SampleRead
的輸入。
當NumberGenerator
隨機選擇一個號碼,通過寫inputbridge.txt
發送到SampleRead
,它就會通過SampleRead
收到,檢查它是否是值5。除值5將輸出「送我的東西......」這是讀通過NumberGenerator
通過ProcessInputStream
。
這種做法應該與支票java進程存在執行shell腳本後得到加強。而且,tailf
進程在手動終止之前不會退出。因此,tailf
可以替換爲另一個代理java應用程序,它具有與NumberGenerator
類型的應用程序通信的協議,以瞭解何時結束執行。如果開發Java代理應用程序,您可以考慮使用Sockets
而不是文件。
嗨,對不起,遲到的迴應。但我無法獲得與您指示的相同的輸出。我的輸出只是一個空白屏幕,如果我輸入任何數字,它都不會顯示任何內容。請讓我知道我要出錯的地方 –
您是否想要運行示例代碼? –
是的,我試圖運行代碼 –