У меня есть несколько файлов zip, каждый из которых содержит несколько файлов, которые я хочу извлечь, используя класс ZipInputStream. Среди них некоторые изображения. Когда я пытаюсь извлечь эти изображения с помощью BufferedOutputStream, они частично распаковываются, а изображения неполны.Я не могу полностью извлечь zip-файлы, используя ZipInputStream
private void extractArchives() {
ZipInputStream zis;
File archiveDir = new File(
Environment.getExternalStorageDirectory().getAbsolutePath() +
"/archives/");
File[] files = archiveDir.listFiles();
for (int i = 0; i < files.length; ++i)
{
File file = files[i];
try
{
zis = new ZipInputStream(new FileInputStream(file));
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null)
{
BufferedOutputStream bos;
byte[] buffer = new byte[102400];
int count;
while ((count = zis.read(buffer)) != -1)
{
String fileName = ze.getName();
if (fileName.endsWith(".jpg"))
{
path += File.separator + fileName;
bos = new BufferedOutputStream(new FileOutputStream(path));
bos.write(buffer, 0, count);
bos.close();
}
}
}
zis.close();
}
catch(FileNotFoundException e) { continue; }
//If the file is not a zip file or is a directory
catch (IOException e) { continue; }
}
}
Есть ли что-то неправильное с кодом выше? Использует ли BufferedOutputStream эту проблему? Я ценю любые идеи. Благодарю.
Где переменные 'files',' 'path' и zis' объявили? У вас есть одна явная проблема в вашем источнике, помимо вашей проблемы с распаковкой: вы всегда добавляете свой путь («путь + = файл.сепаратор + имя_файла»), поэтому имя пути увеличивается дольше, но вы не создаете никаких новых каталогов. –
Да, ты прав. Я должен это исправить. Однако я попытался с одним zip-файлом и одним изображением в нем, и все же изображение не полностью извлечено. –