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 /」)にあるかどうかを確認するコードを書くことですが、もっと簡単な方法があるかもしれません。

4

3 に答える 3

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); 
} 

幸運を。

于 2012-09-29T23:53:52.867 に答える
1

まず、 execの呼び出しが意図したものではないようです。ドキュメントに基づいて、文字列配列を渡す場合、配列の最初の要素はコマンドで、残りはパラメーターです。ここでは代わりに 2 つのコマンドがあります。

1 つのコマンドを使用するだけで非常に簡単に記述でき、exec の単一の String 呼び出しを使用します。

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

次に、コマンドが成功しなかったことを示すために、 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.
  } 

第 3 に、ファイルのコピーが必要な場合は、そのためにシステムを呼び出す必要はありません。java.io API を使用して独自のファイル コピー プログラムを作成できますが、Apache Commons FileUtils支援クラスを再利用することをお勧めします。

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

...
FileUtils.copyFile(new File("/sdcard/music/pic1"),new File("/sdcard/music"))
...
于 2012-09-30T00:39:20.250 に答える
0

send.exitValue() を試して、-1 のようなエラー コードかどうかを確認しましたか

于 2012-09-29T23:44:05.907 に答える