Bunu başarmak için [ Zip Dosya Sistemi Sağlayıcısı ] [1] 'den yararlanabileceğinizi düşünüyorum . Kullanırken FileSystems.newFileSystem
bu ZIP içindeki nesneleri "normal" bir dosya gibi ele alabilirsiniz.
Yukarıdaki bağlantılı belgelerde:
FileSystems.newFileSystem
Yönteme iletilen java.util.Map nesnesindeki zip dosya sistemi için yapılandırma seçeneklerini belirtin . Zip dosyası sisteminin sağlayıcıya özgü yapılandırma özellikleri hakkında bilgi için [Zip Dosya Sistemi Özellikleri] [2] konusuna bakın.
Bir zip dosyası sistemi örneğine sahip olduğunuzda, dosya özniteliklerini değiştirmenin yanı sıra dosyaları kopyalama, taşıma ve yeniden adlandırma gibi işlemleri gerçekleştirmek için [ java.nio.file.FileSystem
] [3] ve [ java.nio.file.Path
] [4] sınıflarının yöntemlerini çağırabilirsiniz .
jdk.zipfs
[Java 11 durumları] [5] içindeki modül belgeleri :
Zip dosyası sistemi sağlayıcısı bir zip veya JAR dosyasını bir dosya sistemi olarak ele alır ve dosyanın içeriğini değiştirme yeteneği sağlar. Zip dosyası sistem sağlayıcısı, FileSystems.newFileSystem
yüklenmişse [ ] [6] tarafından oluşturulabilir .
Örnek kaynaklarınızı kullanarak yaptığım bir örnek. A'nın a .zip
olduğunu unutmayın .jar
, ancak kodunuzu bunun yerine sınıf yolu kaynaklarını kullanacak şekilde uyarlayabilirsiniz:
Kurmak
cd /tmp
mkdir -p x/y/z
touch x/y/z/{a,b,c}.html
echo 'hello world' > x/y/z/d
zip -r example.zip x
Java
import java.io.IOException;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.util.Collections;
import java.util.stream.Collectors;
public class MkobitZipRead {
public static void main(String[] args) throws IOException {
final URI uri = URI.create("jar:file:/tmp/example.zip");
try (
final FileSystem zipfs = FileSystems.newFileSystem(uri, Collections.emptyMap());
) {
Files.walk(zipfs.getPath("/")).forEach(path -> System.out.println("Files in zip:" + path));
System.out.println("-----");
final String manifest = Files.readAllLines(
zipfs.getPath("x", "y", "z").resolve("d")
).stream().collect(Collectors.joining(System.lineSeparator()));
System.out.println(manifest);
}
}
}
Çıktı
Files in zip:/
Files in zip:/x/
Files in zip:/x/y/
Files in zip:/x/y/z/
Files in zip:/x/y/z/c.html
Files in zip:/x/y/z/b.html
Files in zip:/x/y/z/a.html
Files in zip:/x/y/z/d
-----
hello world