2012-12-07 62 views
1

我使用過程中的類來運行這個命令機器人getRuntime()EXEC()與cat命令

/sdcard/file1.mpg /sdcar/file2.mpg > /sdcard/out.mpg 

這裏是我正在試圖做到這一點:

Process processx = Runtime.getRuntime().exec(new String[] {"cat","/sdcard/file1.mpg /sdcard/file2.mpg > /sdcard/out.mpg" }); 

BufferedReader in = new BufferedReader(new InputStreamReader(processx.getInputStream())); 

String line = null; 
while ((line = in.readLine()) != null) { 
     System.out.println(line); 
} 

// Waits for the command to finish. 
processx.waitFor(); 

命令從終端工作,但不是當我嘗試以上時,任何人都可以看到爲什麼?

回答

3

重定向(>)不是操作系統的功能。這是shell的一個功能。爲了使它從Java工作,你必須運行類似如下:

/bin/sh yourcommand > yourfile

即你的情況:

/bin/sh cat /sdcard/file1.mpg /sdcard/file2.mpg > /sdcard/out.mpg

,但你能解釋一下我爲什麼要doeing呢?你知道這個命令完全等價於cp /sdcard/file1.mpg /sdcard/file2.mpg /sdcard/out.mpg,它可以在沒有運行任何命令行的情況下以純java編碼嗎?除非你有特殊的原因繼續下去!在可能的情況下編寫純Java代碼。調試,支持和維護比較容易。

+0

同意關於不訴諸空空可執行做什麼可以用Java實現,但對普通的Android沒有「CP」二進制 - 所以當有人有一個體面的理由做什麼用的可執行文件(從亞行外殼,或者在黑客設備上啓動root helper進程時),他們使用cat進行重定向。 –

+0

OK AlexR,我會嘗試一個純Java的方式來串聯文件,那是因爲我一直在與工藝類工作以執行一些二進制文件/數據/數據/ MYAPP和自然/一味我去到貓的文件如這也 – brux

+0

在android外殼沒有cp,你需要與貓確實做到這一點。這就是爲什麼。 – totten

2

絕對沒有理由使用「貓」來做到這一點。它不是Android上支持或鼓勵的機制,並且沒有理由通過讀取一個文件並將其寫入另一個文件來啓動一個新的可執行文件,以便在java代碼中輕鬆完成。

爲了記錄在案,你正在嘗試做一個shell重定向,因爲你不執行外殼,將無法正常工作。

+0

說好的想到的是,說理我就是這麼做是因爲我執行多個命令(binaires我解壓到/數據/數據/ MyApp的。我嘗試SHAL的一個純Java的辦法處理這一particlar命令 – brux