2012-11-17 6 views
1

war 파일을 다른 파일로 복사하는 코드는 TrueZIP입니다. 예를 들어TrueZIP을 사용하여 파일 복사 예외

TFile srcFile = new TFile(sourceFilePath); 
TFile destFile = new TFile(destFilePath); 
if (!destFile.getParentFile().exists()) { 
    destFile.getParentFile().mkdirs(); 
} 

try { 
    srcFile.cp_rp(destFile); 
    TVFS.umount(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

, 소스 파일 위치 :

I:\Code-Base\test.7.2.0\projects\test\main\branches\test.7.2.0_for_test\ui\portlets\dist\portlets.war\WEB-INF\server-config.wsdd

및 대상 위치 :

D:\deploy\work\237798_237980\web\deploy\prtlets.war\WEB-INF\server-config.wsdd

이미 두 경로가 존재 함을 확인했지만, 나는 InputException 오류 ::

de.schlichtherle.truezip.io.InputException: de.schlichtherle.truezip.fs.FsReadOnlyArchiveFileSystemException: This is a read-only archive file system! 
    at de.schlichtherle.truezip.socket.IOSocket.copy(IOSocket.java:102) 
    at de.schlichtherle.truezip.file.TBIO.cp0(TBIO.java:221) 
    at de.schlichtherle.truezip.file.TBIO.cp_r0(TBIO.java:179) 
    at de.schlichtherle.truezip.file.TBIO.cp_r(TBIO.java:138) 
    at de.schlichtherle.truezip.file.TFile.cp_rp(TFile.java:3210) 
    at com.accela.work.WorkThread.run(WorkThread.java:110) 
    at com.accela.work.Worker.getUpgradePackageByVersion(Worker.java:162) 
    at com.accela.work.Main.generateUpgradePackage(Main.java:114) 
    at com.accela.work.Main.getUpgradePackageByVersion(Main.java:107) 
    at com.accela.work.Main.main(Main.java:75) 
Caused by: de.schlichtherle.truezip.fs.FsReadOnlyArchiveFileSystemException: This is a read-only archive file system! 
    at de.schlichtherle.truezip.fs.FsReadOnlyArchiveFileSystem.mknod(FsReadOnlyArchiveFileSystem.java:54) 
    at de.schlichtherle.truezip.fs.FsBasicArchiveController$1Output.mknod(FsBasicArchiveController.java:273) 
    at de.schlichtherle.truezip.fs.FsBasicArchiveController$1Output.getLocalTarget(FsBasicArchiveController.java:220) 
    at de.schlichtherle.truezip.fs.FsBasicArchiveController$1Output.getLocalTarget(FsBasicArchiveController.java:217) 
    at de.schlichtherle.truezip.fs.FsContextController$Output.getLocalTarget(FsContextController.java:296) 
    at de.schlichtherle.truezip.fs.FsContextController$Output.getLocalTarget(FsContextController.java:280) 
    at de.schlichtherle.truezip.socket.DelegatingOutputSocket.getLocalTarget(DelegatingOutputSocket.java:47) 
    at de.schlichtherle.truezip.socket.DelegatingOutputSocket.getLocalTarget(DelegatingOutputSocket.java:21) 
    at de.schlichtherle.truezip.socket.DelegatingOutputSocket.getLocalTarget(DelegatingOutputSocket.java:47) 
    at de.schlichtherle.truezip.socket.DelegatingOutputSocket.getLocalTarget(DelegatingOutputSocket.java:21) 
    at de.schlichtherle.truezip.fs.FsSyncController$Output.getLocalTarget(FsSyncController.java:421) 
    at de.schlichtherle.truezip.fs.FsSyncController$Output.getLocalTarget(FsSyncController.java:408) 
    at de.schlichtherle.truezip.fs.FsLockController$Output$1GetLocalTarget.call(FsLockController.java:498) 
    at de.schlichtherle.truezip.fs.FsLockController$Output$1GetLocalTarget.call(FsLockController.java:495) 
    at de.schlichtherle.truezip.fs.FsLockController.locked(FsLockController.java:316) 
    at de.schlichtherle.truezip.fs.FsLockController.writeLocked(FsLockController.java:268) 
    at de.schlichtherle.truezip.fs.FsLockController$Output.getLocalTarget(FsLockController.java:501) 
    at de.schlichtherle.truezip.fs.FsLockController$Output.getLocalTarget(FsLockController.java:484) 
    at de.schlichtherle.truezip.socket.DelegatingOutputSocket.getLocalTarget(DelegatingOutputSocket.java:47) 
    at de.schlichtherle.truezip.socket.DelegatingOutputSocket.getLocalTarget(DelegatingOutputSocket.java:21) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Output$GetLocalTarget.call(FsFalsePositiveArchiveController.java:374) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Output$GetLocalTarget.call(FsFalsePositiveArchiveController.java:367) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$TryChild.call(FsFalsePositiveArchiveController.java:507) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController.call(FsFalsePositiveArchiveController.java:104) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Output.getLocalTarget(FsFalsePositiveArchiveController.java:364) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Output.getLocalTarget(FsFalsePositiveArchiveController.java:348) 
    at de.schlichtherle.truezip.socket.InputSocket.getPeerTarget(InputSocket.java:50) 
    at de.schlichtherle.truezip.fs.FsBasicArchiveController$1Input.getDelegate(FsBasicArchiveController.java:199) 
    at de.schlichtherle.truezip.socket.DelegatingInputSocket.getBoundSocket(DelegatingInputSocket.java:43) 
    at de.schlichtherle.truezip.socket.DelegatingInputSocket.newInputStream(DelegatingInputSocket.java:63) 
    at de.schlichtherle.truezip.fs.FsContextController$Input.newInputStream(FsContextController.java:273) 
    at de.schlichtherle.truezip.fs.FsResourceController$Input.newInputStream(FsResourceController.java:242) 
    at de.schlichtherle.truezip.socket.DelegatingInputSocket.newInputStream(DelegatingInputSocket.java:63) 
    at de.schlichtherle.truezip.fs.FsSyncController$Input.newInputStream(FsSyncController.java:378) 
    at de.schlichtherle.truezip.fs.FsLockController$Input$1NewInputStream.call(FsLockController.java:455) 
    at de.schlichtherle.truezip.fs.FsLockController$Input$1NewInputStream.call(FsLockController.java:452) 
    at de.schlichtherle.truezip.fs.FsLockController.locked(FsLockController.java:328) 
    at de.schlichtherle.truezip.fs.FsLockController.writeLocked(FsLockController.java:268) 
    at de.schlichtherle.truezip.fs.FsLockController$Input.newInputStream(FsLockController.java:459) 
    at de.schlichtherle.truezip.fs.FsFinalizeController$Input.newInputStream(FsFinalizeController.java:177) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Input$NewInputStream.call(FsFalsePositiveArchiveController.java:333) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Input$NewInputStream.call(FsFalsePositiveArchiveController.java:326) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$TryChild.call(FsFalsePositiveArchiveController.java:507) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController.call(FsFalsePositiveArchiveController.java:104) 
    at de.schlichtherle.truezip.fs.FsFalsePositiveArchiveController$1Input.newInputStream(FsFalsePositiveArchiveController.java:323) 
    at de.schlichtherle.truezip.socket.IOSocket.copy(IOSocket.java:100) 
    ... 9 more 

답변

3

TrueZIP은 보관 파일이 쓰기 가능한지 확인하기위한 간단한 테스트를 수행합니다. 이 테스트가 실패하면 예외로 표시된 것처럼 아카이브 파일 시스템이 읽기 전용으로 설정됩니다.

대부분의 경우 이는 액세스 권한 문제 일뿐입니다. 그러나 Windows는 특히 어리 석다. 예를 들어 아카이브 파일에 동시에 액세스하는 다른 도구가있는 경우 (많은 Explorer 플러그인에서이 작업을 수행하는 경우) 파일도 효과적으로 읽기 전용입니다.

작업이 진행되는 동안 보관 파일 (및 최상위 디렉토리)과 떨어져 있어야합니다.

+0

이 유용한 답변을 주셔서 감사합니다. Truezip은 보관 파일에 액세스하기위한 훌륭한 API 라이브러리입니다. –

1

읽기 전용 파일에서 바꾸기를 수행 할 수 없습니다. 읽기 전용 파일을 삭제해야합니다 (예 : 쓰기 전용).

destFile이 쓰기 가능한 것인지 확인하십시오.

관련 문제