为了账号安全,请及时绑定邮箱和手机立即绑定

java.util.zip-重新创建目录结构

java.util.zip-重新创建目录结构

肥皂起泡泡 2019-12-26 09:49:11
在尝试使用zip压缩存档时,java.util.zip我遇到了很多问题,而这些问题大部分都是我解决的。现在,我终于获得了一些输出,我在努力获得“正确的”输出。我有一个提取的ODT文件(目录将更适合描述),对此我做了一些修改。现在,我想压缩该目录以重新创建ODT文件结构。将目录压缩并重命名以.odt结尾可以正常工作,因此应该没有问题。主要问题是我丢失了目录的内部结构。一切都变得“平坦”,我似乎没有找到保留原始多层结构的方法。我希望对此有所帮助,因为我似乎找不到问题。以下是相关的代码段:ZipOutputStream out = new ZipOutputStream(new FileOutputStream(    FILEPATH.substring(0, FILEPATH.lastIndexOf(SEPARATOR) + 1).concat("test.zip")));    compressDirectory(TEMPARCH, out);该SEPARATOR是系统文件分隔符和FILEPATH是原来的ODT,我将覆盖,但还没有在这里完成的用于测试目的的文件路径。我只是写到同一目录中的test.zip文件。private void compressDirectory(String directory, ZipOutputStream out) throws IOException{    File fileToCompress = new File(directory);    // list contents.    String[] contents = fileToCompress.list();    // iterate through directory and compress files.    for(int i = 0; i < contents.length; i++)    {        File f = new File(directory, contents[i]);        // testing type. directories and files have to be treated separately.        if(f.isDirectory())        {            // add empty directory            out.putNextEntry(new ZipEntry(f.getName() + SEPARATOR));            // initiate recursive call            compressDirectory(f.getPath(), out);            // continue the iteration            continue;        }else{             // prepare stream to read file.             FileInputStream in = new FileInputStream(f);             // create ZipEntry and add to outputting stream.             out.putNextEntry(new ZipEntry(f.getName()));             // write the data.             int len;             while((len = in.read(data)) > 0)             {                 out.write(data, 0, len);             }             out.flush();             out.closeEntry();             in.close();         }     } }包含要压缩文件的目录位于用户空间中的某个位置,而不与结果文件位于同一目录中。我认为这可能很麻烦,但我真的看不出来。我也发现问题可能出在使用相同的流进行输出,但是我再也看不到如何。我在一些示例和教程中看到了它们使用的getPath()替代方法,getName()但进行更改后得到的压缩文件为空。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 1110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信