Я использую класс, который я нашел через Google, чтобы распаковать .zip файл .. .. .zip содержит файлы и папку. Проблема в том, что FileOutputStream
бросает
filenotfoundException
.. Но файл должен быть взят из файла .zip, чтобы он мог ранее существовать?
Вот код, который я использую в Asynctask
:
@Override
protected Boolean doInBackground(String... params) {
try {
String zipFile = Path + FileName;
FileInputStream fin = new FileInputStream(zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
if (ze.isDirectory()) {
dirChecker(ze.getName());
} else {
FileOutputStream fout = new FileOutputStream(Path
+ ze.getName()); // <-- crashes here
while ((length = zin.read(buffer)) > 0) {
fout.write(buffer, 0, length);
publishProgress(length);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
} catch (Exception e) {
mProgressDialog.dismiss();
return false;
}
return true;
}
Другой Asynctask
, который загружает .zip:
@Override
protected Boolean doInBackground(String... params) {
try {
URL url = new URL(params[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
File f = new File(Path+FileName);
if(!f.exists())
{
f.mkdirs();
if(!f.createNewFile())
{
f.delete();
f.createNewFile();
}
}
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(Path+FileName);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
return true;
} catch (Exception e)
{
e.printStackTrace();
e.getCause();
return false;
}
Я получаю снова FilenotfoundException
с (это каталог) ошибка сообщения!.