java - 使用 TrueZIP 复制文件异常

标签 java truezip

这是我使用 TrueZIPwar 文件复制到另一个文件的代码。

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

最佳答案

TrueZIP 会做一个简单的测试来检查存档文件是否可写。如果此测试失败,则存档文件系统将设置为只读,如异常所示。

在大多数情况下,这只是访问权限的问题。但是 Windows 特别讨厌。例如,如果有另一个工具同时访问存档文件(许多 Explorer 插件都这样做),那么该文件实际上也是只读的。

因此请在操作运行时远离归档文件(最好是其目录)。

关于java - 使用 TrueZIP 复制文件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429364/

相关文章:

java - Selenium Webdriver - 取消选中复杂表格中的所有复选框

java - 当解析 JSONArray 出现在 Retrofit 列表的最后时?

java - 简单快速的方法来计算二进制整数到0的汉明距离?

java - TrueZip 创建虚拟目录而不是存档

java - TrueZip - 如何获取 Zip 存档中文件夹的大小

java - 提取大型 zip 文件的内容

java - 注册同一 MBean 类的多个 MBean

java - 如何使用TrueZip压缩文件?

java - 将 java.io.File 子类化是一个坏主意吗?

java - 如何让Eclipse编译器将现有的类文件复制到目标目录?