簡體   English   中英

Java將不會執行cmd行?

[英]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

這里有一些問題。

  1. *.java部分是通常由shell擴展的glob
  2. 從流程到流程的組裝管道也是Shell的功能
  3. 輸出重定向是一個shell功能

基本上,您確實需要調用Shell來運行這種類型的管道。 exec方法運行帶有參數的特定程序。 您可能可以通過直接調用shell並將命令行作為參數傳遞來使其工作,但我懷疑這樣做是否可行。

您可能必須通過列舉目錄內容並分別讀取每個文件來實現cat *.java部分。 為每個sed命令打開單獨的Process實例,並使用Process實例的輸入和輸出流在它們之間實現管道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM