在尝试使用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);
Run Code Online (Sandbox Code Playgroud)
这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 …Run Code Online (Sandbox Code Playgroud) 假设我有一个文件t.txt,一个目录t和另一个文件t/t2.txt.如果我使用linux zip实用程序"zip -r t.zip t.txt t",我会得到一个zip文件,其中包含以下条目(unzip -l t.zip):
Archive: t.zip
Length Date Time Name
-------- ---- ---- ----
9 04-11-09 09:11 t.txt
0 04-11-09 09:12 t/
15 04-11-09 09:12 t/t2.txt
-------- -------
24 3 files
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用java.util.zip.ZipOutputStream复制该行为并为该目录创建zip条目,则java会抛出异常.它只能处理文件.我可以在zip文件中创建/ t2.txt条目并添加使用t2.txt文件内容但我无法创建目录.这是为什么?