Добавление новых файлов в zip-архив с помощью Truezip

Я искал и искал, так что поверьте мне, когда я говорю, что я действительно в замешательстве. Примечание: я вынужден использовать Java 6.

Мне нужно вставить XML-файл в zip-архив программно с использованием Java, но без извлечения архива и его повторного сжатия. Я указал на Truezip как на решение моей проблемы, но я не могу заставить Truezip признать, что мой "archive.zip" является архивом. Я получаю сообщение "archive.zip/file.txt не является каталогом", когда пытаюсь получить доступ к архиву на месте через:

new TFile("example.zip/audit.xml") 

Я ссылался на блог Truezip, а также на несколько вопросов о Stackru, но не могу найти ни одного примера кода, иллюстрирующего то, что я пытаюсь сделать. Может ли кто-нибудь предоставить / указать фрагмент, который выполняет простую задачу, подобную этой?

Трассировка полного стека:

java.io.FileNotFoundException: /Users/ss042306/java-scan-example/target/fortify/example.zip/audit.xml
at de.schlichtherle.truezip.file.TFileOutputStream.newOutputStream(TFileOutputStream.java:147)
at de.schlichtherle.truezip.file.TFileOutputStream.<init>(TFileOutputStream.java:116)
at com.fortify.ps.maven.plugin.sca.ScanMojo.copyPreviousComments(ScanMojo.java:745)
at com.fortify.ps.maven.plugin.sca.ScanMojo.execute(ScanMojo.java:332)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.nio.file.NoSuchFileException: /Users/ss042306/java-scan-example/target/fortify/example.zip/audit.xml
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
    at java.nio.file.Files.newOutputStream(Files.java:216)
    at de.schlichtherle.truezip.fs.nio.file.FileOutputSocket$1OutputStream.<init>(FileOutputSocket.java:243)
    at de.schlichtherle.truezip.fs.nio.file.FileOutputSocket.newOutputStream(FileOutputSocket.java:257)
    at de.schlichtherle.truezip.file.TFileOutputStream.newOutputStream(TFileOutputStream.java:143)
    ... 24 more

Я ссылался на следующие ресурсы:

[1] http://illegalexception.schlichtherle.de/2011/07/26/appending-to-zip-files/

[2] добавьте файл в zip, используя TrueZip

[3] https://truezip.java.net/kick-start/tutorial.html

РЕДАКТИРОВАТЬ: Truezip не функционировал, как описано, потому что у меня не было всех зависимостей, необходимых для обработки файлов.zip как виртуальных каталогов. После того, как я включил этот фрагмент ниже в свой pom.xml, я мог взаимодействовать с ZIP-файлами как виртуальными каталогами.

`   <dependency>
        <groupId>de.schlichtherle.truezip</groupId>
        <artifactId>truezip-driver-zip</artifactId>
        <version>7.7.9</version>
    </dependency>` 

Без этой зависимости не было доступного TArchiveDetector для идентификации ".zip" как архива.

1 ответ

Решение

Может быть, в вашем пути к классам просто отсутствует ZIP-архив с драйверами TrueZIP?

Обычно я рекомендую создать пример проекта из файла TrueZIP Archetype *, а затем настроить / интегрировать его в соответствии с вашими потребностями. Пожалуйста, следуйте инструкциям на странице " Начало работы" - она ​​проведет вас через весь процесс.

Другие вопросы по тегам