I am trying to find a file within a zip file and get it as an InputStream
. So this is what I am doing to get it so far and I am not certain if I am doing it correctly.
Here is a sample as the original is slightly longer but this is the main component...
public InputStream Search_Image(String file_located, ZipInputStream zip)
throws IOException {
for (ZipEntry zip_e = zip.getNextEntry(); zip_e != null ; zip_e = zip.getNextEntry()) {
if (file_located.equals(zip_e.getName())) {
return zip;
}
if (zip_e.isDirectory()) {
Search_Image(file_located, zip);
}
}
return null;
}
Now the main problem I am facing is that The ZipInputStream
in Search_Image
is the same as the original component of the ZipInputStream
...
if(zip_e.isDirectory()) {
//"zip" is the same as the original I need a change here to find folders again.
Search_Image(file_located, zip);
}
Now for the question, how do you get the ZipInputStream
as the new zip_entry
? Also please add in if I did anything wrong in my method as my logic with this class is still lacking.
You should use the class ZipFile
without worrying yourself with an input stream if you don't need it yet.
ZipFile file = new ZipFile("file.zip");
ZipInputStream zis = searchImage("foo.png", file);
public InputStream searchImage(String name, ZipFile file) {
for (ZipEntry e : Collections.list(file.entries())) {
if (e.getName().endsWith(name)) {
return file.getInputStream(e);
}
}
return null;
}
Some facts:
Search_Image
is not fine, searchImage
is)endsWith(name)
because the file could be inside a folder and a filename inside a zip always contains the path