Wiem, że Oracle zauważa kompresor/dekompresor plików ZIP/GZIP on their website. Ale mam scenariusz, w którym muszę skanować i dowiedzieć się, czy w grę wchodzą zagnieżdżone ZIP/RAR. Na przykład, następujący przypadek:Biblioteka narzędzi Java dla obsługi plików zagnieżdżonych ZIP
-MyFiles.zip
-MyNestedFiles.zip
-MyMoreNestedFiles.zip
-MoreProbably.zip
-Other_non_zips
-Other_non_zips
-Other_non_zips
wiem, że Apache Commons kompresować pakiet i java.util.zip są wideley stosowane pakiety gdzie fotografia kompresji rzeczywiście przeznaczony dla brakujących funkcji w java.util.zip np niektóre ustawienia postaci podczas robienia zipoutów. Ale nie jestem pewien, czy narzędzia do rekursji za pomocą zagnieżdżonych plików zip, a odpowiedzi dostarczone na SO nie są bardzo dobrym przykładem na to. Próbowałem następujący kod (który dostałem od Oracle blogu), ale podejrzewałem, zagnieżdżona rekurencji katalog nie dlatego, że po prostu nie może znaleźć pliki:
public static void processZipFiles(String pathName) throws Exception{
ZipInputStream zis = null;
InputStream is = null;
try {
ZipFile zipFile = new ZipFile(new File(pathName));
String nestPathPrefix = zipFile.getName().substring(0, zipFile.getName().length() -4);
for(Enumeration e = zipFile.entries(); e.hasMoreElements();){
ZipEntry ze = (ZipEntry)e.nextElement();
if(ze.getName().contains(".zip")){
is = zipFile.getInputStream(ze);
zis = new ZipInputStream(is);
ZipEntry zentry = zis.getNextEntry();
while (zentry!=null){
System.out.println(zentry.getName());
zentry = zis.getNextEntry();
ZipFile nestFile = new ZipFile(nestPathPrefix+"\\"+zentry.getName());
if (zentry.getName().contains(".zip")) {
processZipFiles(nestPathPrefix+"\\"+zentry.getName());
}
}
is.close();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(is != null)
is.close();
if(zis!=null)
zis.close();
}
}
Może robie coś źle - albo za pomocą niewłaściwe utils. Moim celem jest zidentyfikowanie, czy któryś z plików lub zagnieżdżonych plików zip ma rozszerzenia plików, na które nie pozwalam. Ma to na celu uniemożliwienie moim użytkownikom przesyłania zabronionych plików, nawet gdy są one zapakowane. Mam także opcję korzystania z Tiki, która może wykonywać rekursywne parsowanie (używając rozwiązania Zukka Zitting), ale nie jestem pewien, czy mogę użyć metadanych do wykonania tego wykrycia, jak chcę.
Każda pomoc/sugestia jest doceniana.
nie powinien pan być otwarcie zagnieżdżonego Zip ze strumienia wejściowego zewnętrznego zip, zamiast nazwy pliku (który nie będzie działał, ponieważ plik znajduje się w pliku zip nie w systemie plików)? – Gagravarr