FileOutputStream上的FileNotFoundException

时间:2015-02-13 10:35:08

标签: java android

我的Android应用程序非常简单地提取zip。

我想用FileName创建一个文件夹,删除zip文件中的扩展名(.zip)。

我成功了。

然而,某些设备例外。

设备名称:KM-S300 os版本:2.3.4

源:

private void extractZip (File file) throws UTFDataFormatException {
    FileInputStream fis = null;
    FileOutputStream fos = null;
    ZipInputStream zis = null;
    ZipEntry ze = null;

    byte[] data = new byte[1024];
    int offset = 0;

    String rootName = file.getAbsolutePath();
    rootName = rootName.substring(0, rootName.lastIndexOf("."));

    String rootFileName = rootName.substring(rootName.lastIndexOf("/") + 1);

    File root = new File(rootName);
    root.mkdirs();

    try {
        fis = new FileInputStream(file);
        zis = new ZipInputStream(fis);

        while (( ze = zis.getNextEntry() ) != null) {
            try {
                File f = new File(root, ze.getName());
                if (!f.isDirectory()) {
                    f.getParentFile().mkdirs();

                    fos = new FileOutputStream(f); // <<-- ERROR
                    while (( offset = zis.read(data) ) != -1) {
                        fos.write(data, 0, offset);
                    }
                }
            } finally {
                try {
                    fos.close();
                } catch (Exception e) {}
            }
        }

        file.delete();

    }catch (UTFDataFormatException e){
        throw e;
    }catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            zis.close();
        } catch (Exception e) {}
        try {
            fis.close();
        } catch (Exception e) {}
    }
}

我无法理解异常

java.io.FileNotFoundException: /mnt/sdcard/test/marker/Explosion/failed/0.png (No such file or directory)
    at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
    at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
    at com.sample.MainActivity.extractZip(MainActivity.java:507)

在创建FileOutputStream之前对File的父文件夹进行

为什么应用程序会出现异常?

1 个答案:

答案 0 :(得分:0)

如果新文件不存在或者不是目录,则只创建父目录。这不是一个明智的考验。如果父目录不存在,则应创建它。