[英]getInputStream for a ZipEntry from ZipInputStream (without using the ZipFile class)
如何在不使用ZipFile
类的情况下从ZipInputStream
获取ZipEntry
的InputStream
?
it works this way 它以这种方式工作
static InputStream getInputStream(File zip, String entry) throws IOException {
ZipInputStream zin = new ZipInputStream(new FileInputStream(zip));
for (ZipEntry e; (e = zin.getNextEntry()) != null;) {
if (e.getName().equals(entry)) {
return zin;
}
}
throw new EOFException("Cannot find " + entry);
}
public static void main(String[] args) throws Exception {
InputStream in = getInputStream(new File("f:/1.zip"), "launch4j/LICENSE.txt");
Scanner sc = new Scanner(in);
while(sc.hasNextLine()) {
System.out.println(sc.nextLine());
}
in.close();
}
Err, the ZipInputStream
already is an InputStream.
错误,
ZipInputStream
已经是一个InputStream.
You don't need another one. 你不需要另一个。 Getting the next
ZipEntry
positions the stream at the beginning of the entry. 获取下一个
ZipEntry
将流定位在条目的开头。 See the Javadoc. 见Javadoc。
To return a List of Input Streams that can be used later I used the following 要返回稍后可以使用的输入流列表,我使用了以下内容
public static List<InputStream> listResourcesInJar(URL jar) throws IOException{
ZipInputStream zipInputStream = new ZipInputStream(jar.openStream());
ZipEntry zipEntry = null;
List<InputStream> inputStreams = new ArrayList<>();
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String entryName = zipEntry.getName();
if (entryName.endsWith(".xsd")) {
inputStreams.add(convertToInputStream(zipInputStream));
}
}
return inputStreams;
}
private static InputStream convertToInputStream(final ZipInputStream inputStreamIn) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(inputStreamIn, out);
return new ByteArrayInputStream(out.toByteArray());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.