2012-09-29 90 views
2

比方說,我有這樣的代碼如何檢查命令是否成功?

moveDirectory.setOnClickListener(new OnClickListener(){ 
public void onClick(View v) 
{ 
    try{ 
     Process send = Runtime.getRunetime().exec(new String[] {"cd /sdcard/music/", "cp pic1 /sdcard/pic1"}); 
     send.waitFor(); 
    } catch (Exception ex){ 
     String toast = null; 
     Log.i(toast, "Couldn't copy file", ex); 
     } 
    } 
}); 

如果無法複製「PIC1」我該怎麼檢查呢?所以我可以讓用戶知道使用吐司?我唯一的想法是在那之後編寫代碼來檢查「pic1」是否在正確的路徑中(在這種情況下是「/ sdcard /」),但也許有一種更簡單的方法。

+1

Java中有I/O包可以處理文件操作,比如複製。我不確定我在這裏看到'exec'的價值。 – Makoto

回答

1

,你可以讀取命令的輸出。在cp命令中,不輸出意味着沒有錯誤,如果有輸出,您可以將其顯示給用戶以通知錯誤。

要讀取命令的輸出,你應該加入類似:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(send.getInputStream())); 

String line; 
ArrayList<String> output = new ArrayList<String>(); 

while ((line = bufferedReader.readLine()) != null){ 
    output.add(line); 
} 

好運。

+0

試圖這一個幾個不同的方式,並獲得相同的價值,如果該文件存在複製或不 –

+0

另外我發現,這真的得到了輸出。如果我鍵入回聲stackoveflow輸出命令給我stackoverflow,但我如何能讓它回聲,如果它發現文件? –

+0

經過思考,嘗試和編輯正在工作。謝謝 –

0

你試過send.exitValue(),然後檢查它是否是一個錯誤代碼像-1

+0

甚至沒有想過,現在就試試。 –

+0

我得到0時,它複製,當沒有什麼可複製 –

0

首先它看起來像你調用exec是不是一個預期的。基於文檔,如果您將它傳遞給一個String數組,則該數組的第一個元素是命令,其餘的參數是其餘的。這裏你有兩個命令。

你可以只使用一個命令很容易使用EXEC的一個String調用寫:

Process send = Runtime.getRuntime().exec("cp /sdcard/music/pic1 /sdcard/pic1"); 

其次,沒有exeception由WAITFOR,以表明該命令沒有成功甩。基於文檔,他們只檢查將拋出的異常是指示當前線程已被中斷,在這種情況下,命令甚至可能沒有完成。

你需要做的是檢查進程的退出狀態代碼。這是返回的值waitFor方法。流程/程序返回的常見做法是存在狀態0以指示成功並指示其他值來指示錯誤。因此,代碼應改爲:

Process send = Runtime.getRunetime().exec("cp /sdcard/music/pic1 /sdcard/pic1"); 
    try { 
    if (send.waitFor() != 0) { 
     String toast = null; 
     Log.i(toast, "Couldn't copy file", ex); 
    } 
    } catch (InterruptedException e) { 
    // up to you how to recover this situation. 
    } 

第三,也是最重要...如果你想要做的就是複製文件沒有必要調用系統爲。您可以使用java.io API來編寫自己的文件複製程序...但更好地重用Apache公共類FileUtils幫助類。

import org.apache.commons.io.FileUtils; 
import java.io.File; 

... 
FileUtils.copyFile(new File("/sdcard/music/pic1"),new File("/sdcard/music")) 
... 
+0

我正在使用副本作爲示例。將嘗試wjat你在這裏建議。 –