-1

サードパーティのライブラリを使用せずに、zip / jarを直接(解凍せずに)操作できるようにするためのソリューションを見つける必要があります。しかし、ととのFileSystemつながりがよくわからないようです。PathURI

コピーしようとしているURIは
jar:file://E:/Projects/ZipDir/dist/test_folder/test.zip!/test_file.txt

私が得ている例外は次のとおりです:
FileSystemNotFoundExceptionしかし、そのzipファイルは確かに存在します。

Java 7を使用して、これは私がこれまでに持っているものです:

...
ZipDirectory zip = new ZipDirectory("test_folder/test.zip");
Path copyTo = zip.getPath("/test_file.txt");
Path copyFrom = Paths.get("test_file.txt");

Files.copy(copyFrom, copyTo, StandardCopyOption.REPLACE_EXISTING);
...

//

import java.io.IOException;
import java.net.URI;
import java.nio.file.*;
import java.util.HashMap;

public class ZipDirectory {

    private Path path;
    private FileSystem fileSystem;

    public ZipDirectory(String path){
        this.path = Paths.get(Paths.get(path).toUri());
        create();
    }

    private void create(){
        HashMap<String, String> env = new HashMap<>(); 
        env.put("create", "true");
        try {          
            fileSystem = FileSystems.newFileSystem(path, null);
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }

    public Path getPath(String relativePath){
        return Paths.get(URI.create("jar:file:/" + path.toUri().getPath() + "!" + fileSystem.getPath(relativePath)));
    }

    public Path getRoot(){
        return Paths.get(URI.create(path.toUri().getPath() + "!/"));
    }

    public void close(){
        try {
            fileSystem.close();
        } catch (IOException ex) {
            System.err.println(ex);
        }
        fileSystem = null;
    }
}
4

1 に答える 1

2

私は自分の質問に答えるとは思っていませんでしたが、うまくいきました。

Java7でアーカイブをディレクトリのように扱う

于 2012-07-29T13:15:35.707 に答える