Java zip - zip不需要的目录

时间:2014-12-16 05:00:55

标签: java playframework

我是OSX用户并且目前正在使用Play Framework,当我使用java.util.zip来压缩文件夹中的某些文件时,会出现一个奇怪的问题。这些文件将自动生成(完成)到/Users/vorsz/Desktop/MonthlyReport/August。但是当我尝试使用下面的代码压缩它们时:

val baseURL: String = "/Users/vorsz/Desktop/MonthlyReport/"
val directoryToZip = new File(baseURL+"August").mkdir()
val writer = new PrintWriter(baseURL+"August/test.html", "UTF-8")
writer.println("<Table><tr><td>45296</td><td>2014-07-23</td><td>2014-08-01</td><td>010194</td><td></td><td>120</td><td>C-00322</td><td>ANK 007</td><td></td><td></td></tr></Table>")
writer.close()
val writer1 = new PrintWriter(baseURL+"August/test2.html", "UTF-8")
writer1.println("<Table><tr><td>45296</td><td>2014-07-23</td><td>2014-08-01</td><td>010194</td><td></td><td>120</td><td>C-00322</td><td>ANK 007</td><td></td><td></td></tr></Table>")
writer1.close()

val f = new FileOutputStream(baseURL+"test.zip")
val zip = new ZipOutputStream(new BufferedOutputStream(f))
zip.putNextEntry(new ZipEntry(baseURL+"August/test.html"))
zip.putNextEntry(new ZipEntry(baseURL+"August/test2.html"))
zip.close()

它会在正确的文件夹中生成一个zip文件,但是当我提取它时,它会生成一些不需要的文件夹,如UsersvorszDesktopMonthlyReport。所以我需要打开它们,直到我可以访问test.htmltest2.html。当我提取zip文件时,我想要的只是一个八月文件夹及其文件或文件本身,如果可能的话。谁能在这帮助我?

注意:我也尝试过实施ZipUtils class,但结果仍然相同..

2 个答案:

答案 0 :(得分:2)

我认为Apache Common Compress库可以解决您的问题 我已经使用这个库进行了测试,它运行正常。

您不仅可以参考zip,还可以参考以下链接中的许多存档类型压缩和解压缩示例。

http://commons.apache.org/proper/commons-compress/examples.html

答案 1 :(得分:2)

根据您更新的代码,我认为您需要做的事情并不是文件系统的混乱,只需直接生成zip文件,并完全控制名称

val baseURL: String = "/Users/vorsz/Desktop/MonthlyReport/"

val f = new FileOutputStream(baseURL+"test.zip")
val zip = new ZipOutputStream(new BufferedOutputStream(f))

zip.putNextEntry(new ZipEntry("/August/test.html"))
val writer = new PrintWriter(new OutputStreamWriter(zip, "UTF-8"))
writer.println("<Table><tr><td>45296</td><td>2014-07-23</td><td>2014-08-01</td><td>010194</td><td></td><td>120</td><td>C-00322</td><td>ANK 007</td><td></td><td></td></tr></Table>")
writer.flush()

zip.putNextEntry(new ZipEntry("/August/test2.html"))
val writer1 = new PrintWriter(new OutputStreamWriter(zip, "UTF-8"))
writer1.println("<Table><tr><td>45296</td><td>2014-07-23</td><td>2014-08-01</td><td>010194</td><td></td><td>120</td><td>C-00322</td><td>ANK 007</td><td></td><td></td></tr></Table>")
writer1.flush()

zip.close()

这将添加一个名称没有基目录的条目,然后将内容写入zip,然后添加另一个条目,然后写入其他内容。没有文件系统缓冲,不用担心名称,只是生成随你拉链