【问题标题】:Java - Zipping files from websites?Java - 从网站压缩文件?
【发布时间】:2011-11-10 02:44:42
【问题描述】:

当然,我只是想知道如何在网络上使用 java 压缩文件。

我知道如何对硬盘上的目录执行此操作,但对网站不知道:

ZipFile zipfile = new ZipFile("C:/Documents and Settings/User/desktop/something.file");

非常感谢。

【问题讨论】:

  • “网络上的文件”是什么意思?就像您通过 HttpUrlConnection 从删除站点收到的内容一样?
  • 好吧,基本上,我希望它从网络服务器压缩文件,而不是压缩位于硬盘驱动器上的文件,给定地址blahblablah.com/file.txt(这就是我所说的“从网络”)。
  • 如果您的意思是希望在 Web 服务器上压缩文件并发送到已经压缩的程序,那么您不能。服务器需要为您执行此操作并将压缩文件发送给您。你的问题一点都不清楚。
  • 所以您的输入来自一个 URL,但是您希望输出到哪里? URL,文件,字节数组?你想用压缩的“文件”做什么,为什么不先把它下载到一个文件中,然后再压缩到本地呢?

标签: java web zip directory


【解决方案1】:

所以我认为您要下载并压缩文件。这是两个不同的任务,所以你需要做两件事:

  • 从网络上下载文件的东西
  • 将其压缩成 zip 文件的东西

建议你用Apache HttpComponents下载文件,用Apache Compress压缩。

然后代码会变成这样......

    // Obtain reference to file
    HttpGet httpGet = new HttpGet("http://blahblablah.com/file.txt");
    HttpResponse httpResponse = httpclient.execute(httpGet);
    HttpEntity httpEntity = httpResponse.getEntity();

    // Create the output ZIP file
    ZipArchiveOutputStream zip = new ZipArchiveOutputStream(zipFile);

    try {
        // Write a file header in the .zip file
        ArchiveEntry entry = new ZipArchiveEntry("file.txt");
        zip.putArchiveEntry(entry);

        // Download the file and write it to a compressed file
        IOUtils.copy(httpEntity.getContent(), zip);

        // The file is now written
        zip.closeArchiveEntry();
    } finally {
        // Ensure output file is closed
        zip.close();
    }

它是如何工作的? HttpComponents 正在获取文件的 InputStream,而 Compress 正在提供 OutputStream。然后你只是从一个流复制到另一个。就像魔术一样!

【讨论】:

    【解决方案2】:

    都是一样的,但是你必须使用几种方法:

    String filePath = getServletContext().getRealPath("/WEB-INF/your_folder/your_file");
    

    filepath 是文件系统的绝对路径(C:/.../WEB-INF/your_folder/your_file)

    【讨论】:

    • 嗯,这不是我想做的。显然该文件需要是一个 JAR 文件?尽管如此,难道没有更简单的方法可以从网络服务器压缩文件吗?而不是来自您的驱动器。
    【解决方案3】:

    “在网络上压缩文件”听起来像是在网络或应用程序服务器的代码中以编程方式执行此操作。

    此页面可能会有所帮助。它讨论了如何使用 java.util.zip 包:http://java.sun.com/developer/technicalArticles/Programming/compression/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2014-09-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多