Запись (изменение или добавление) файла внутри почтового индекса

Я следовал инструкциям в этой теме, используя код, который был там. Я смог добавить файл в zip-файл без распаковки и повторного сжатия, но у меня возникла проблема, позвольте мне показать вам мой код:

private void saveFileIntoProjectArchive(Path pathOfFile) {
    this.projectArchiveFile.setWritable(true, false);
    Path zipFilePath = Paths.get(this.projectArchiveFile.getAbsolutePath()),
            pathToSaveInsideZIP = null;
    FileSystem fs;
    try {
        fs = FileSystems.newFileSystem(zipFilePath, null);
        pathToSaveInsideZIP = fs.getPath(pathOfFile.toString().substring((int) this.transactionalProjectFolder.getAbsolutePath().length()));
        System.out.println("Coping from:\n\t"+pathOfFile+"\nto\n\t"+pathToSaveInsideZIP);
        Files.copy(pathOfFile, pathToSaveInsideZIP, REPLACE_EXISTING);
        System.out.println("Done!!!");
        fs.close();
    } catch (java.nio.file.NoSuchFileException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    projectArchiveFile.setWritable(false, false);
}

то, что я пытаюсь сделать, это то, что у меня есть много файлов для одного и того же проекта, этот проект является архивом (ZIP, на который в коде ссылается java.io.File с именем projectArchiveFile, переменная экземпляра моего класса), содержащая все эти файлы, когда я хочу работать с определенным файлом в моем архиве, я распаковываю только этот файл в папку, структура которой идентична структуре в моем архиве (ZIP, projectArchiveFile), ссылка на эту папку - java.io.File, называемый транзакция ProjectFolder, также переменная экземпляра моего класса. Но дает мне эту ошибку:

копирование из: C:\Dir1\Dir2\Dir3\ Начало структуры архива \ Другая папка-копия структуры архива \ Файл Excel.xlsm в \ Начало структуры архива \ Другая копия папки-структуры архива \ Файл Excel.xlsm

java.nio.file.NoSuchFileException: Begin of Archive stucure\Another folder replica of the archive structure\ at com.sun.nio.zipfs.ZipFileSystem.checkParents(ZipFileSystem.java:846)
at com.sun.nio.zipfs.ZipFileSystem.newOutputStream(ZipFileSystem.java:515)
at com.sun.nio.zipfs.ZipPath.newOutputStream(ZipPath.java:783)
at com.sun.nio.zipfs.ZipFileSystemProvider.newOutputStream(ZipFileSystemProvider.java:276)
at java.nio.file.Files.newOutputStream(Files.java:170)
at java.nio.file.Files.copy(Files.java:2826)
at java.nio.file.CopyMoveHelper.copyToForeignTarget(CopyMoveHelper.java:126)
at java.nio.file.Files.copy(Files.java:1222)

остальная часть трассировки стека - мои классы.

Я был в состоянии записать в корень архива (zip), но всякий раз, когда я пытаюсь записать внутри папки, которая находится внутри архива (zip), это терпит неудачу, как вы можете заметить в трассировке стека, он говорит тот java.nio.file.NoSuchFileException: Begin of Archive stucure\Another folder replica of the archive structure\ и он останавливается прямо перед именем, если файл, который я пытаюсь скопировать, Я ПОЛНОСТЬЮ УВЕРЕН, что путь внутри zip существует, и он правильно написан, просто не хочу писать (я пробовал с файлами. скопируйте и Files.move) файл внутри архива, я застрял в этом в течение месяца, я не знаю, что еще делать, любое предложение будет оценено!!!

заранее спасибо!:)...

2 ответа

Решение

Даже если вы уверены, что путь существует, я бы для устранения неполадок добавил ниже строку и посмотрел, какую структуру каталогов он создает.

Ошибка указывает, что каталоги отсутствуют внутри почтового индекса. Возможно, вы используете странные имена папок, не поддерживаемые zip и т. Д.

System.out.println("Coping from:\n\t"+pathOfFile+"\nto\n\t"+pathToSaveInsideZIP);

Files.createDirectories(pathToSaveInsideZIP);  // add this row

Files.copy(pathOfFile, pathToSaveInsideZIP, StandardCopyOption.REPLACE_EXISTING);
System.out.println("Done!!!");

Я рекомендую вам попробовать TrueZip, он прост в использовании, он предоставляет любой архив в виртуальную файловую систему, а затем вы можете легко добавлять, удалять или редактировать любые файлы внутри архива.

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