我是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文件,但是当我提取它时,它会生成一些不需要的文件夹,如Users
,vorsz
,Desktop
和MonthlyReport
。所以我需要打开它们,直到我可以访问test.html
和test2.html
。当我提取zip文件时,我想要的只是一个八月文件夹及其文件或文件本身,如果可能的话。谁能在这帮助我?
注意:我也尝试过实施ZipUtils class,但结果仍然相同..
答案 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,然后添加另一个条目,然后写入其他内容。没有文件系统缓冲,不用担心名称,只是生成随你拉链