[英]Java: Starting a cmd process that won't execute his job, but loaded into memory
[英]Java won't execute cmd line?
我嘗試在Java中運行此Shell,但它永遠無法正常工作。
Process p = Runtime.getRuntime().exec(" cat *.java|sed '/import/d'|sed'/package/d'>>b.java ");
當我將cmd更改為“ ls
”或“ open foo.java
”時,代碼將起作用。
知道為什么嗎?
問題在於文件通配符模式不會被glob擴展。 因此,該模式將按字面意義處理,並且找不到文件。 您需要像bash
這樣的shell來解釋這一點:
Process p = Runtime.getRuntime().exec(new String[] {
"bash", "-c",
"cat *.java|sed '/import/d'|sed'/package/d'>>b.java" });
確保檢查getErrorStream的內容。
旁:考慮使用更方便的ProcessBuilder ,它使用varargs數組構建命令String
。
這里有一些問題。
*.java
部分是通常由shell擴展的glob 基本上,您確實需要調用Shell來運行這種類型的管道。 exec
方法運行帶有參數的特定程序。 您可能可以通過直接調用shell並將命令行作為參數傳遞來使其工作,但我懷疑這樣做是否可行。
您可能必須通過列舉目錄內容並分別讀取每個文件來實現cat *.java
部分。 為每個sed
命令打開單獨的Process
實例,並使用Process
實例的輸入和輸出流在它們之間實現管道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.