2011-11-17 2 views
0

Java에서 odbc : jdbc로 XML을 연결하고 A.xml 파일을 업데이트 중입니다. 업데이트가 끝나면 A.xml을 다른 위치에 복사하고 해당 파일의 이름을 변경합니다 (copy.xml). 모든 것이 정상적으로 작동합니다. 그러나 업데이트 당시 원래 A.xml 파일이 열려 있으면 copy.xml 파일이 비어 있음을 알게되었습니다. 그런 다음 어떤 열 값이 변경되면 워크 시트를 자동 저장하기 위해 A.xml 파일에 매크로를 작성하기로 결정했습니다. 이 매크로는 작동하지만 copy.xml 파일은 여전히 ​​비어 있습니다.xml 파일을 Java로 열어 복사 중

나는 파일을 복사

List<String> command = new ArrayList<String>(); 
      command.add("cmd.exe"); 
      command.add("/c"); 
      command.add("copy A.xml copy.xml ");    
      ProcessBuilder processBuilder = new ProcessBuilder(command); 
      Process process = processBuilder.start(); 

을 사용하고 있습니다.

이 작업을 수행하는 다른 방법이 있습니다. here 는 또한, 당신이 새로운 장소에 이상 복사 할 때 파일이 업데이트되지 않는 확인해야

import static java.nio.file.StandardCopyOption.*; 
... 
Files.copy(source, target, REPLACE_EXISTING); 

전체 문서 : 여기

+0

외부 프로세스를 사용하는 것은 일반적으로 잘못된 접근 방식이지만 * copy.xml이 비어 있어야하는 유일한 이유는 A.xml이 읽혀질 때 * 비어있는 경우입니다. 'A.xml' (예 : 독점적 인 파일 잠금)을 읽는 중에 오류가 발생하면 새로운 파일을 생성해서는 안됩니다 : 즉, A.xml이 잘린 것 같습니다 (쓰기의 일부로?) 데이터 소스가 아직 데이터를 디스크에 다시 쓰지 않았습니다. 그것은 펑키 동기화 문제처럼 들립니다. –

+0

... 아니면 A.xml이 [이미] 열린 [독점]이고 읽기에 실패하면'copy'가 잔여 파일을 남기고 있습니다. 프로세스 종료 코드를 점검하여 오류가 있는지 확인하십시오. –

+0

process.waitFor()가 0을 반환하고 있습니다. – user234194

답변

1

는 자바 IO API를 사용하여 파일을 복사 할 수있는 방법입니다 .

+0

예 (+1). 그러나 이것이'copy'가 새로운 * empty * 파일이되는 이유에 대해서는 설명하지 않습니다. –

+0

JDK 1.5를 사용하고 있습니다. – user234194

+0

여러 독자가 동시에 파일을 읽을 수는 있지만 작성자가있는 경우 동일한 파일에 대한 액세스가 독점이됩니다. 귀하의 경우에는 소스 파일이 업데이트되고있는 (기록 된) 소스 파일을 복사 (읽기)하려고 시도하고있을 것입니다. 파일을 누가 업데이트합니까? 그것은 당신의 코드 또는 별도의 스레드/프로세스인가요? – GETah

관련 문제