2

私は このスレッドの指示に従い、そこにあるコードを使用して、ファイルを解凍して再圧縮せずに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、コードではprojectArchiveFileというjava.io.File、私のクラスのインスタンス変数によって参照される)であり、これらのファイルはすべて、アーカイブ内の特定のファイルを操作する場合、そのファイルのみをアーカイブ内のファイルと同じ構造のフォルダー(ZIP、projectArchiveFile)に解凍します。そのフォルダーへの参照はjavaです。 .io.FileはtransactionalProjectFolderと呼ばれ、これも私のクラスのインスタンス変数です。しかし、私にこのエラーを与えています:

対処元:C:\ Dir1 \ Dir2 \ Dir3 \ Begin of Archivestucure\アーカイブ構造の別のフォルダーレプリカ\ExcelFile.xlsmから\Beginof Archivestucure\アーカイブ構造の別のフォルダーレプリカ\ExcelFile.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で試しました) .copy and Files.move)アーカイブ内のファイル、私はこれで1か月間立ち往生しています、他に何をすべきかわかりません、どんな提案も歓迎されます!!!

前もって感謝します!:)..。

4

2 に答える 2

1

パスが存在することを確認したとしても、トラブルシューティングのために、下の行を追加して、どのディレクトリ構造が作成されるかを確認します。

エラーは、ディレクトリがzip内にないことを示しています。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!!!");
于 2013-02-01T14:34:08.380 に答える
0

使いやすいTrueZipを試してみることをお勧めします。これにより、任意のアーカイブが仮想ファイルシステムに公開され、アーカイブ内の任意のファイルを簡単に追加、削除、または編集できます。

于 2013-02-01T13:26:38.330 に答える