解压时的FileOutputStream抛出FileNotFoundException异常 [英] FileOutputStream throws FileNotFoundException when UnZipping

查看:123
本文介绍了解压时的FileOutputStream抛出FileNotFoundException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用一个类,我通过谷歌找到解压缩的.zip文件。该.ZIP中包含的文件和文件夹。问题是,的FileOutputStream 抛出 FileNotFoundException异常 ..但文件应采取从.zip文件,这样怎么能previously存在吗?
这里是code我使用了的AsyncTask

I'm using a class that I found through google to unzip a .zip file.. The .zip contains files and folder. The problem is that FileOutputStream throws FileNotFoundException.. But the file should be taken from the .zip file so how can it previously exist?
Here is the code I'm using in the 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:

Another AsyncTask which downloads the .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;
      }

我得到再次 FileNotFoundExcpetion 用(是一个目录)消息错误!

I get again the FileNotFoundExcpetion with (is a directory) message error!.

推荐答案

的FileOutputStream 将抛出 FileNotFoundException异常如果目录(多个)涉及不存在。我没有看到任何目录创建code在这里,甚至任何code,以检查是否路径的存在,所以这可能是发生了什么事情。

FileOutputStream will throw FileNotFoundException if the directory(s) involved don't exist. I don't see any directory-creation code here, or even any code to check if Path exists, so that's probably what's going on.

这篇关于解压时的FileOutputStream抛出FileNotFoundException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆