2012-02-23 1 views
1

파일을 복사하려고합니다. 여기에 소스가 있습니다. 참고 : des은 URL을 포함하는 문자열 변수입니다.getRuntime(). exec()를 사용하는 파일 복사

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

아무도 왜 작동하지 않는지 말할 수 있습니까?

+1

오류 스트림을 읽습니다. 대답을 담을거야. – BalusC

+0

그냥'exec ("복사 원본"+ 원본 + "대상"+ des);'? –

+0

Apache Commons의 파일 복사 http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html –

답변

1

Runtime.exec 나는이 문자열을 명령 처리기 cmd.exe에 보냅니다. 그래서 이것은 cmd.exe을 실행하고 그 안에 또 다른 cmd.exe을 실행하고 인수를 전달합니다. 나는 그것을 테스트 할 윈도우 머신을 가지고 있지 않다. (신에게 감사한다.)하지만 나는 인수를 명령 행으로 실행하기 위해서 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. 사용 ProcessBuilderProcess를 구축하기.
  2. 자동으로 '2'를 처리하므로 명령을 여러 부분으로 나눕니다.
  3. 출력 스트림을 병합합니다 (완전히 필요하지는 않지만 ..로 간단하게 만듭니다).
  4. 출력 스트림을 사용합니다 (및 디스플레이).
  5. 일반적으로 읽고 읽고 구현하십시오. 모두When Runtime.exec() won't의 권장 사항입니다.
+0

+1 좋은 기사갑니다. – RanRag

+1

@RanRag 필자는'Process' 클래스를 사용하지 않고 (순수 Java (1)을 유지하는 것을 선호합니다),' 프로세스 '는 일반적으로 기사에서 설명한 이유로 실패합니다. 제대로 사용하는 것은 까다로운 수업입니다. 1) 그것은 나를 떠올리게한다. 당신의 대답을 높이 평가하는 것을 잊었다. :) –