У меня есть класс UnZip для получения изображений из базы данных
class UnZip extends AsyncTask<String, Integer, String> {
private String _mArchivePath;
private String _mOutPutStream;
private int per;
public UnZip(String mArchivePath,String mOutPutStream) {
_mArchivePath = mArchivePath;
_mOutPutStream = mOutPutStream;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
InputStream inputstream;
ZipInputStream zipinputstream;
try {
String filename;
inputstream = new FileInputStream(_mArchivePath);
zipinputstream = new ZipInputStream(new BufferedInputStream(inputstream));
ZipEntry mZipEntry;
byte[] buffer = new byte[32*1024];
int count;
while ((mZipEntry = zipinputstream.getNextEntry()) != null) {
Log.v("Decompress", "Unzipping " + mZipEntry.getName());
filename = mZipEntry.getName();
per++;
publishProgress(per);
if (mZipEntry.isDirectory()) {
File fmd = new File(_mOutPutStream + filename);
fmd.mkdirs();
continue;
}
FileOutputStream fileoutputstream = new FileOutputStream(_mOutPutStream + filename);
while ((count = zipinputstream.read(buffer)) != -1) {
fileoutputstream.write(buffer, 0, count);
}
fileoutputstream.close();
zipinputstream.closeEntry();
}
zipinputstream.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
Он отлично работает с файлом database.zip, содержащим изображения (32 МБ~), но когда я попробовал его с тем же файлом database.zip, но с некоторыми дополнительными изображениями (43 МБ ~), он выдает эту ошибку:
03-03 23:42:00.200: V/Decompress(11593): Unzipping /database/weed/ak_47_1.jpg
03-03 23:42:00.202: W/System.err(11593): java.io.FileNotFoundException: /storage/emulated/0/unzipped/database/weed/ak_47_1.jpg: open failed: ENOENT (No such file or directory)
03-03 23:42:00.204: W/InputMethodManagerService(584): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@cce61f3 attribute=android.view.inputmethod.EditorInfo@aa9eeb0, token = android.os.BinderProxy@2db5667
Я нашел проблему, она возникает, когда я пытаюсь разархивировать файл с подпапками, если подпапки не существуют, приложение выдает мне эту ошибку. На мгновение я изменил основной код, поэтому при запуске приложение автоматически создает папки, потому что я знаю структуру zip, но если я хочу использовать другой zip, что я могу сделать?
new File(_mOutPutStream + filename)
наnew File(_mOutPutStream, filename)
. Поскольку существующий код будет работать только в том случае, если у вас есть косая черта в конце имени папки. - person BrentM   schedule 05.03.2015