FileNotFoundException(没有这样的文件或目录)

2023-12-29

我正在编写一个 Android 应用程序,我需要从多个文件夹中读取多个文件并将它们添加到多个 zip 存档中。我需要将档案的最大大小限制为 16mb。因此,在运行时将文件添加到存档时,如果文件大小超过 16 mb,则创建另一个具有相同大小限制的存档,依此类推。我正在使用以下包装类:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ChunkedZippedOutputStream {
    private ZipOutputStream zipOutputStream;

    private String path;

    private String name;

    private long currentSize;

    private int currentChunkIndex;

    private final long MAX_FILE_SIZE = 16 * 1000 * 1024; // 16mb limit

    private final String PART_POSTFIX = ".part";

    private final String FILE_EXTENSION = ".zip";

    public ChunkedZippedOutputStream(String path, String name) throws FileNotFoundException {
        this.path = path;
        this.name = name;
        constructNewStream();
    }

    public void addEntry(ZipEntry entry) throws IOException {
        long entrySize = entry.getCompressedSize();
        if ((currentSize + entrySize) > MAX_FILE_SIZE) {
            closeStream();
            constructNewStream();
        } else {
            currentSize += entrySize;
            zipOutputStream.putNextEntry(entry);
        }
    }

    private void closeStream() throws IOException {
        zipOutputStream.close();
    }

    private void constructNewStream() throws FileNotFoundException {
        zipOutputStream = new ZipOutputStream(new FileOutputStream(new File(path, constructCurrentPartName())));
        currentChunkIndex++;
        currentSize = 0;
    }

    private String constructCurrentPartName() {
        // This will give names is the form of <file_name>.part.0.zip, <file_name>.part.1.zip, etc.
        StringBuilder partNameBuilder = new StringBuilder(name);
        partNameBuilder.append(PART_POSTFIX);
        partNameBuilder.append(currentChunkIndex);
        partNameBuilder.append(FILE_EXTENSION);
        return partNameBuilder.toString();
    }
}

我这样使用它:

String zipPath = Environment.getExternalStorageDirectory() + "/MyApp/MyFolder/Zip/";
String zipName = "MyZipFle";
ChunkedZippedOutputStream zippedOutputStream = new ChunkedZippedOutputStream(zipPath, zipName);
....
zippedOutputStream.addEntry(new ZipEntry("ZipEntry" + i));

但是 ChunkedZippedOutputStream 对象的实例化我收到此错误:

  java.io.FileNotFoundException: /mnt/sdcard/MyApp/MyFolder/Zip/MyZipFle.part0.zip (No such file or directory)

我知道我的路径输入或名称有问题,但我不知道是什么。

另外,如果代码片段不正确,请告诉我,我是从这里得到的如何将一个巨大的 zip 文件分割成多个卷? https://stackoverflow.com/questions/243992/how-to-split-a-huge-zip-file-into-multiple-volumes

如果我的问题有更简单的解决方案,请告诉我。谢谢


输出目录不存在。看File.mkdirs()的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FileNotFoundException(没有这样的文件或目录) 的相关文章

随机推荐

  • Java:int数组用非零元素初始化

    据 JLS 称 int初始化后数组应立即用零填充 然而 我面临的情况并非如此 这种行为首先出现在 JDK 7u4 中 并且也出现在所有后续更新中 我使用 64 位实现 下面的代码抛出异常 public static void main St
  • 在 C 中,const 变量是否保证在内存中不同?

    说到字符串文字 C99 标准规定 6 4 5 6 如果这些数组的元素具有适当的值 则未指定这些数组是否不同 如果程序尝试修改这样的数组 则行为是未定义的 我找不到类似的警告或对 const 变量的明确保证 可以表达一下 x y在上下文中co
  • 如何使用 C# 更好地查询 Active Directory 中的多个域?

    我正在尝试将 LDAP AD 搜索从仅搜索当前登录的域扩展到搜索 AD 中的所有域 该方法接受带有查询的字符串并返回 LDAPInformation 对象 当我问的时候 还有比这种方式更好的搜索名字的方法吗 由于按姓氏查找人员时需要使用通配
  • 在 Hive 中将多列中的列合并为一列

    有没有什么方法可以对 Apache Hive 中的explode 函数执行相反的操作 假设我有一张这种形式的表格id int description string url string 我想从这个表中创建一个看起来像这样的表id int j
  • 返回 R 中每对节点之间的相互节点列表

    我想获得图中每对节点之间相互连接的节点列表 library igraph G lt graph c 1 2 1 3 1 4 2 4 2 3 2 5 3 5 4 5 5 6 5 7 7 8 7 9 directed F plot G 边是无向
  • 找不到调试信息或与 Visual Studio 的不匹配

    我复制了一个现有项目并重命名了该文件夹 现在 当我尝试编译应用程序时出现此错误 调试信息找不到或不匹配 没有加载符号 您想继续调试吗 如果我单击 是 它就会编译并运行良好 但现在我必须处理这个消息 只是好奇我在项目属性中更改了什么以使其停止
  • 扩展 Highmaps 副作用

    我正在尝试创建佛罗里达州的点密度图 虽然我知道 Highmaps 不支持带有地图点的颜色轴 我扩展了它并且它有效 但它带来了副作用 当我单击图例中的某一类别时 不会发生隐藏 例如 如果我单击 gt 10 则所有大于 10 的值都不会隐藏 当
  • 在java中读取进程的实时输出

    我在我的 java 应用程序中启动了一个 python 脚本 Process p Runtime getRuntime exec python script py 该脚本循环运行 并且仅由事件 或用户交互 取消 该脚本在每个循环周期写入输出
  • Windows 7 上的 Glassfish 启动域失败

    我想在 Windows 7 上使用 JAVA 8 JDK 66 启动 Glassfish 4 1 1 Server 但我的命令 asadmin start domain 失败 这似乎是一个不起眼的错误 因为我在命令提示符中收到一条很长的失败
  • 为什么我的 Azure SQL 数据库表永久锁定?

    我有一个独立的 Azure SQL 测试数据库 除了通过 SSMS 的开发计算机和开发 Web 应用程序实例之外 没有任何活动连接 我是唯一一个使用这个数据库的人 我正在一个大约 1M 记录的表上运行一些测试 我们需要在其中执行大量操作UP
  • UIPinchGestureRecognizer 的触摸位置

    我想在我的 iPhone 应用程序中使用捏合手势实现缩放 问题是 在识别手势时调用的方法中 我无权访问触摸事件本身 所以我无法真正获取它们的locationInView 并且我想得到它以便正确地居中我的放大 In the UIPinchGe
  • Spring / Hibernate @Transactional 如果随后进行第二个 @Transactional 调用,则不会刷新事务

    我的 Spring Boot 应用程序有一个奇怪的行为 该应用程序有在视图中打开会话 to false 我有一个控制器和一个服务 公开了 2 个带注释的方法 交易 应用程序属性 spring jpa open in view false 我
  • 警告:隐式声明

    我有一项计算机科学 MOOC CS50 作业需要交 在其中 我必须通过哈佛网站提交作业 但它不会接受我的代码 因为它显示 警告 隐式声明 有办法关闭它吗 我正在使用两个函数 islower and isupper 它们就是导致挂断的原因 我
  • 将 qDateTimeEdit 限制为 15 分钟

    In http qt project org doc qt 5 qabstractspinbox html specialValueText prop http qt project org doc qt 5 qabstractspinbo
  • 如何调整 SQL Azure 数据库的大小

    如何将 SQL Azure Web Edition 5 GB 数据库的大小调整为 1 GB 数据库 我不再需要额外的容量 也不想以更高的费率计费 我在管理门户中没有看到任何内容 快速的网络搜索也没有找到任何结果 我回答过类似的问题here
  • 引发了“Microsoft.WindowsAzure.StorageClient.StorageClientException”类型的异常

    引发了 Microsoft WindowsAzure StorageClient StorageClientException 类型的异常 有时 即使我们的结构正在运行并且角色管理器已启动 我们也会遇到此类异常 代码在以下行处中断 emai
  • 有没有一种简单的方法可以获取 ASP.Net 中的总页面响应时间?

    通常来说 PHP 或其他 Web 框架获取总响应时间很容易 只需在文件顶部启动计时器并在文件末尾停止即可 在 ASP Net 中 有整个页面生命周期 所以我不知道如何做到这一点 我希望此响应时间记录发生在母版页中 并且响应时间显示在页面的页
  • 带 {get;} 的 C# 表达式主体与不带 {get;} 的 C# 表达式主体

    这个问题在这里已经有答案了 由于我不知道适用于此的术语 因此我不确定如何搜索对此的现有评论 我最近在类似于以下的表达式体上浪费了大量时间 public SomeListViewModel SearchSomeModel gt new Sho
  • 创建一个包含可动态添加文本的 Flash 的页面

    我必须创建一个可以设置为全屏的网页 我的意思是真正的全屏 而不是像按F11 在全屏中应该有一些文字显示 采取http stackoverflow com http stackoverflow com例如 通常 它会显示其内容 问题 但有一天
  • FileNotFoundException(没有这样的文件或目录)

    我正在编写一个 Android 应用程序 我需要从多个文件夹中读取多个文件并将它们添加到多个 zip 存档中 我需要将档案的最大大小限制为 16mb 因此 在运行时将文件添加到存档时 如果文件大小超过 16 mb 则创建另一个具有相同大小限