मुझे लगता है कि आप इसे प्राप्त करने के लिए [ जिप फाइल सिस्टम प्रोवाइडर ] [१] का लाभ उठा सकते हैं । FileSystems.newFileSystem
इसका उपयोग करते समय ऐसा लगता है कि आप उस ज़िप में ऑब्जेक्ट को "नियमित" फ़ाइल के रूप में मान सकते हैं।
ऊपर दिए गए दस्तावेज़ में:
Java.util में जिप फाइल सिस्टम के लिए विन्यास विकल्प निर्दिष्ट करें FileSystems.newFileSystem
। ज़िप फ़ाइल सिस्टम के लिए प्रदाता-विशिष्ट कॉन्फ़िगरेशन गुणों के बारे में जानकारी के लिए [ज़िप फ़ाइल सिस्टम गुण] [2] विषय देखें।
एक बार जब आपके पास एक ज़िप फ़ाइल सिस्टम का एक उदाहरण है, तो आप [ java.nio.file.FileSystem
] [३] और [ java.nio.file.Path
] [४] वर्गों के तरीकों को कॉपी करने, स्थानांतरित करने और फ़ाइलों का नाम बदलने के साथ-साथ फ़ाइल विशेषताओं को संशोधित करने के लिए भी कर सकते हैं।
jdk.zipfs
[11 जावा] [5] में मॉड्यूल के लिए प्रलेखन :
जिप फाइल सिस्टम प्रोवाइडर एक जिप या JAR फाइल को एक फाइल सिस्टम के रूप में मानता है और फाइल की सामग्री में हेरफेर करने की क्षमता प्रदान करता है। जिप फाइल सिस्टम प्रोवाइडर द्वारा FileSystems.newFileSystem
स्थापित किया जा सकता है [ ] [६]।
यहाँ एक उदाहरण उदाहरण है जो मैंने आपके उदाहरण संसाधनों का उपयोग करके किया था। ध्यान दें कि एक .zip
है .jar
, लेकिन आप अपने कोड को क्लासपैथ संसाधनों का उपयोग करने के लिए अनुकूलित कर सकते हैं:
सेट अप
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
जावा
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);
}
}
}
उत्पादन
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