我需要知道一個特定的字符串是否包含在文件列表中。文件列表是動態的,我必須檢查一個動態的字符串列表。這必須在Java中完成以處理結果(true或false)。而MS Windows也是一項要求。從Java調用GnuWin命令還是有更好的方法嗎?
我想過這個問題,我試圖使用UNIX的方式來做到這一點:
find C:/temp | xargs grep import -sl
隨着GnuWin這部作品在cmd中沒有任何問題。所以我試圖將其轉換成Java語言。我閱讀了許多關於使用Runtime類和ProcessBuilder類的文章。但沒有任何提示正在工作。最後,我想下面的兩段代碼:
String binDir = "C:/develop/binaries/";
List<String> command = new ArrayList<String>();
command.add("cmd");
command.add("/c");
command.add(binDir+"find");
command.add("|");
command.add(binDir+"xargs");
command.add(binDir+"grep");
command.add("import");
command.add("-sl");
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:/temp"));
final Process proc = builder.start();
printToConsole(proc.getErrorStream());
printToConsole(proc.getInputStream());
int exitVal = proc.waitFor();
和
String binDir = "C:/develop/binaries/";
String strDir = "C:/temp/";
String[] command = {"cmd.exe ", "/C ", binDir + "find.exe " + strDir + " | " + binDir + "xargs.exe " + binDir + "grep.exe import -sl" };
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
printToConsole(proc.getErrorStream());
printToConsole(proc.getInputStream());
int exitVal = proc.waitFor();
我也嘗試過很多其他的方式來Concat的命令,但無論我得到(例如文件未找到)的錯誤信息或者這個過程永遠不會回來。
我的問題:1。 你知道一個更好的方式來做好這項工作? 2.如果不是:你看到代碼中有錯誤嗎? 3.如果沒有:你有另一種方法我應該嘗試運行該命令嗎?
在此先感謝。
我在第一次嘗試時沒有看到您的strDir。這是一個錯字嗎? – 2012-04-23 14:40:38
不,第二個strDir由'builder.directory(新文件(「C:/ temp」));'在第一個中設置。 – 2012-04-23 14:43:59
難道你不會混淆strDir和binDir嗎?無論如何,我個人寧願嘗試用Java代碼來做到這一點,如果需要的話,也可以使用與你的cmd相同的Java庫/框架。雖然我喜歡Unix命令的能力,但你所寫的代碼不是很強大,也不是很便攜。 – 2012-04-23 14:46:29