Я знаю, что Oracle замечает методы сжатия/декомпрессии файлов ZIP/GZIP on their website. Но у меня есть сценарий, где мне нужно сканировать и выяснить, вовлечены ли какие-либо вложенные ZIP/RAR. Например, следующий случай:Библиотека утилиты Java для обработки вложенных ZIP-файлов
-MyFiles.zip
-MyNestedFiles.zip
-MyMoreNestedFiles.zip
-MoreProbably.zip
-Other_non_zips
-Other_non_zips
-Other_non_zips
Я знаю, что Apache Commons сжать пакет и java.util.zip являются wideley используются пакеты, где Обще сжимают фактически обслуживает недостающие функции в java.util.zip, например, некоторые настройки персонажа при выполнении zipouts. Но я не уверен в том, что утилиты для рекурсии через вложенные файлы zip и ответы, представленные на SO, не очень хорошие примеры этого. Я попытался следующий код (который я получил от блога Oracle), но, как я подозревал, вложенная каталог рекурсии не удается, потому что он просто не может найти файлы:
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();
}
}
Может быть, я делаю что-то неправильно - или с помощью неправильные утилиты. Моя цель - определить, получили ли файлы или вложенные zip-файлы расширения файлов, которые я не разрешаю. Это делается для того, чтобы я мог запретить моим пользователям загружать запрещенные файлы, даже когда они их застегивают. У меня также есть возможность использовать Tika, который может выполнять рекурсивный синтаксический анализ (используя решение Zukka Zitting), но я не уверен, могу ли я использовать метаданные для этого обнаружения, как я хочу.
Любая помощь/предложение оценены.
ты не должен открыть вкладку «Вложенный Zip» из входного потока внешней записи zip, а не по имени файла (что не будет работать, поскольку файл находится в zip не в файловой системе)? – Gagravarr