あなたは大きなファイル、またはファイルとすべてコピーする必要がある場合:java.nio.file.Files
Path a = ...
Path b = ...
Files.copy(a,b);
ドキュメントについてはこちらを参照してくださいでそれを行うには
てみてくださいJavaの内部File.copy()を使用するとファイルに関連付けられたシステム権限が高すぎるため、すべての負荷をシステムにオフロードできます。
次のトリックファーストのユーザー文字列配列をexec()の引数として試してみてください。 2番目に、 'cmd'コマンドのあとに/ C引数をつけてパイプで 'xcopy'を実行してください。私がisWindows()呼び出しを行う行の近くのサンプルコードを見てください。
xcopyコマンドはCMDシェル内で実行され、/ Cは正常に実行された後に終了します。 CMD.exeの詳細
public int sysCopyFile(Resource fromResource, Resource toResource) throws ServiceException {
int returnCode = -1;
try {
String[] copyCommand = null;
if (IOUtils.isWindows()) {
copyCommand = new String[] {"cmd", "/C", "copy", "/Y", fromResource.getFile().getAbsolutePath(), toResource.getFile().getAbsolutePath()};
} else if (IOUtils.isUnix() || IOUtils.isMac()) {
copyCommand = new String[] {"/bin/cp", "-pr", fromResource.getFile().getAbsolutePath(),toResource.getFile().getAbsolutePath()};
}
final Process p = Runtime.getRuntime().exec(copyCommand);
new StreamLogger(p.getErrorStream(), log, StreamLogger.WARN);
new StreamLogger(p.getInputStream(), log, StreamLogger.DEBUG);
returnCode = p.waitFor();
if (returnCode != 0) throw new ServiceException("Unable to to copy. Command: {" + copyCommand[0] + "} has returned non-zero returnCode: " + returnCode);
} catch (IOException e) {
throw new ServiceException(e);
} catch (InterruptedException e) {
throw new ServiceException(e);
}
return returnCode;
}
代わりにProcessBuilderを試しましたか?それはRunime.exec()よりも良いと思われます –
これも試してみましたが無駄に... – rcs