【问题标题】:Java zip files and directories into one archiveJava zip 文件和目录到一个存档中
【发布时间】:2015-04-23 06:05:16
【问题描述】:

我的文件结构如下:

C:/test/example1/file1.txt
C:/test/file2.txt
C:/test/file3.txt

如何归档这些文件和目录,以便生成的 zip 看起来像这样:

Archive.zip
     example
          file1.txt
     file2.txt
     file3.txt

就像 WinRar 在选择多个文件和文件夹进行压缩时所做的那样。

代码:

Path baseDir = Paths.get(content.toString());
Path zipPath = Paths.get(mainJarDir.toString());
Map<String, ?> env = Collections.singletonMap("create", "true");
URI uri = URI.create("jar:" + zipPath.toUri());

try {
  final FileSystem zipfs = FileSystems.newFileSystem(uri, env);
} 
catch (Exception e) {
  e.printStackTrace();
  try {
    MoreFiles.copyRecursive(baseDir, zipfs.get("/"), RecursionMode.FAIL_FAST, StandardCopyOption.REPLACE_EXISTING);
  } 
  catch (Exception ex) {
    ex.printStackTrace();
  }
}

【问题讨论】:

    标签: java file directory compression zip


    【解决方案1】:

    这是使用one of my packages 完成的:

    final Path baseDir = Paths.get("c:\\test");
    
    final Path zipPath = Paths.get("path/to/zipfile");
    final Map<String, ?> env = Collections.singletonMap("create", "true");
    final URI uri = URI.create("jar:" + zipPath.toUri());
    
    try (
        final FileSystem zipfs = FileSystems.newFileSystem(uri, env);
    ) {
        // in java7-fs-more
        MoreFiles.copyRecursive(baseDir, zipfs.getPath("/"), RecursiveMode.FAIL_FAST);
    }
    

    【讨论】:

    • 谢谢你的回答,但是不使用库就没有办法吗?
    • 可以,但这需要写FileVisitorFiles.walkFileTree()。另外,您必须处理来自不同提供商的路径......这个库已经为您做的所有事情,为什么还要犹豫? :p 另外,它很轻
    • 是的,所以我会试试图书馆 :) 谢谢!
    • 那么 try 语句后的 "(" 是怎么回事?我得到一个错误。我可以用标准的 try/catch 块替换它吗?
    • 这是一个 try-with-resources 语句。你不使用 Java 7+ 吗?
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    相关资源
    最近更新 更多