2012-02-23 6 views
1

ファイルをコピーしようとしています。ここにソースがあります。注:desはURLを含む文字列変数です。getRuntime()を使用したファイルコピー。exec()

Process process = Runtime.getRuntime(). 
    exec("cmd.exe\t/c\tcopy\t"+source+"\t"+des); 

誰も私にそれが動作しない理由を教えてもらえますか?

+1

エラーストリームを読み取ります。それは答えを含むでしょう。 – BalusC

+0

'exec("コピー元 "+ソース+"デス "+デ);'? –

+0

Apache Commonsのファイルコピーhttp://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html –

答えて

1

Runtime.exec私は、文字列をコマンドプロセッサーcmd.exeに送信すると思います。これはcmd.exeを実行していて、別のcmd.exeをその内部に実行し、引数を渡します。私はそれをテストするためのWindowsマシンを持っていませんが(神に感謝します)、私はコマンドラインとして引数を実行するように指示するための引数がcmd.exeにあると思います。

4

私はあなたがFileUtils.copyFile()を使用する必要があると思いますが、とにかくこれを試してください。代わりにsingle stringarrayを構築し、execにそれを渡すよりもとしてあなたのコマンドを渡すの

String[] command = new String[5]; 
command[0] = "cmd"; 
command[1] = "/c"; 
command[2] = "copy"; 
command[3] = "test.java"; 
command[4] = "D:"; 
Process p = Runtime.getRuntime().exec (command); 

私は私のためにうまく働いたこの

String command = "cmd /c copy test.java D:"; 

を試してみました。

2

アドバイス:

  1. Processを構築するためにProcessBuilderを使用してください。
  2. 自動的に '2'が処理されます - コマンドを部分的に分解します。
  3. 出力ストリームをマージします(完全には必要ではありませんが、より簡単になります)。
  4. 出力ストリームを消費します(および表示)。
  5. しかし、一般的には、When Runtime.exec() won'tすべて勧告を読んで実装します。
+0

+1いい記事。 – RanRag

+1

@RanRag私は 'Process'クラスを自分で使っていません(私は純粋なJava '(1)を保つのが好きですが)' 'Java'を作成するための単一行呼び出しを認識するのに十分な問題を見ました。 「プロセス」は、一般に、この記事で概説された理由で失敗する。適切に使用するのは難しいクラスです。 1)それは私に思い出させる、あなたの答えを上げることを忘れてしまった。 :) –

関連する問題