Java 控制zip存档中文件的排序顺序 描述

Java 控制zip存档中文件的排序顺序 描述,java,php,sorting,unzip,Java,Php,Sorting,Unzip,我对学习是否有任何方法可以使用PHP和/或Java中的标准例程控制zip文件中文件的排序顺序感兴趣 我主要对使用shell\u exec()或类似工具来使用zip/unzip不感兴趣,但如果它提供了一个易于阅读的解决方案,我可能会感兴趣 对于排序顺序,如果zip文件中没有可用的排序顺序,则可以安全地假定它表示日期/时间。我没有看过说明书,所以我不知道 例子 档案 foo.txt bar.txt test.txt newfile.txt 假设每个文件都包含文件名(foo.txt=>foo.txt)

我对学习是否有任何方法可以使用PHP和/或Java中的标准例程控制zip文件中文件的排序顺序感兴趣

我主要对使用
shell\u exec()
或类似工具来使用zip/unzip不感兴趣,但如果它提供了一个易于阅读的解决方案,我可能会感兴趣

对于排序顺序,如果zip文件中没有可用的排序顺序,则可以安全地假定它表示日期/时间。我没有看过说明书,所以我不知道

例子 档案

foo.txt
bar.txt
test.txt
newfile.txt

假设每个文件都包含文件名(foo.txt=>foo.txt)

问题

我想给文件附加一个排序顺序,这样当使用
unzip
解压文件时,文件会以正确的顺序结束。这很重要,为什么?因为我使用
unzip-p
管道传输zip文件的内容

文件添加到存档的顺序应该无关紧要

结果

预期结果(为了本例(使用unzip-p))

test.txt
foo.txt
newfile.txt

您可以使用命令
zipinfo
(或
unzip-Z
)来显示存档中的文件
manzipinfo
还提供了如何对输出进行排序的示例,但是如果您在数组中读取文件并对数组进行排序,也可以使用PHP对其进行排序。

解压缩文件(或文件系统中的任何文件)的排序顺序取决于您用来查看文件的“客户端”。*nix系统上的ls命令将默认显示按名称排序的文件。如果您使用某种形式的文件管理器应用程序(或解压),您将能够选择排序。对归档文件进行预定义排序对我来说没有多大意义。

这其实并不难。我发现文件索引与文件添加到归档文件的顺序有关,这控制了
unzip-p
的输出,因为它似乎以0..n的方式迭代文件

下面是如何创建满足条件的文件。(几乎是因为我忘记了txt文件中的换行符)


我需要以这样一种方式编写zip文件,即后续解压-p以正确的顺序输出文件。使用您描述的将zipfile读入数组并进行排序的技术,这可能吗?您能解释一下您的最终目标是什么吗?比如,您可能希望您的自述文件在WinZip中无需滚动即可显示。因为我认为不可能做到你所描述的,但也许有更好的方法。我的最终目标在“结果”部分中描述。没别的了。为了能够回答这个问题,我想您需要熟悉
解压
命令。我不是说文件系统中的文件,而是zip存档中的文件。虽然这对你来说可能没有意义,但对我来说却有意义。我无法更改“客户端”中的排序。我必须用正确的顺序写一个文件。
$files = array(
    'test.txt',
    'foo.txt',
    'newfile.txt',
    'bar.txt'
);

$outfile = 'testout.zip';
if (file_exists($outfile)) {
    unlink($outfile);
}
$o = new ZipArchive();
$o->open($outfile,ZipArchive::CREATE);
foreach($files as $key => $file) {
    $o->addFile($file);
}

$o->close();