Я пытаюсь разархивировать некоторые файлы из zip-файла в распакованный каталог с той же файловой структурой, что и zipped-файл, но у меня возникают трудности с методом getNextEntry(). Кажется, он возвращает только файлы в заархивированном файле, а не папки, вызывающие FileNotFoundException, когда я пытаюсь создать файл в директории, которая не существует.Unzipping File не извлекает папки
Например, первый уровень моего архива, как следующее:
Folder 1 file2.txt Folder 2 Folder 3 file.txt
Когда я называю getNextEntry() первое, что возвращенное file.txt
, вторая вещь, возвращенное Folder 1/file2.txt
. Даже вложенные папки игнорируются. Однако это было раньше, но я не уверен, что я сделал, чтобы сломать его.
Файл, который я передаю, представляет собой файл с застежкой-молнией, расположенный во внутренней памяти. Любая помощь будет высоко ценится!
public boolean unZipAndEncrypt(File file) {
boolean isSuccess = false;
ZipInputStream zin = null;
try {
ZipFile zipFile = new ZipFile(file);
FileInputStream fin = new FileInputStream(file);
zin = new ZipInputStream(fin);
ZipEntry ze;
File contentDir = new File(bookDirectory, contentId);
while ((ze = zin.getNextEntry()) != null) {
String name = ze.getName();
if (ze.isDirectory()) {
File dir = new File(contentDir, name);
dir.mkdirs();
continue;
}
FileModel fileModel = new FileModel(zipFile.getInputStream(ze), name);
if (!ze.getName().contains("cp_index")) {
fileModel = encryptor.encrypt(fileModel);
}
File toWrite = new File(contentDir, fileModel.getFullPathName());
toWrite.createNewFile();
OutputStream fout = new FileOutputStream(toWrite);
try {
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fileModel.getInputStream().read(buffer)) != -1) {
fout.write(buffer, 0, len);
}
} finally {
fileModel.close();
zin.closeEntry();
fout.close();
}
}
isSuccess = true;
} catch (FileNotFoundException e) {
Log.e(TAG, "", e);
} catch (IOException e) {
Log.e(TAG, "", e);
} finally {
file.delete();
try {
zin.close();
} catch (IOException e) {
Log.e(TAG, "", e);
} catch (NullPointerException e) {
Log.e(TAG, "", e);
}
}
return isSuccess;
}
Теперь я чувствую себя как полный идиот. Не собираюсь признавать, сколько времени я потратил на это. Спасибо за помощь! –