【发布时间】:2017-03-18 19:56:59
【问题描述】:
有没有办法在使用 TrueZip 忽略文件名大小写的同时访问存档中的文件?
想象一下以下带有内容的 zip 存档:
MyZip.zip
-> myFolder/tExtFile.txt
-> anotherFolder/TextFiles/file.txt
-> myFile.txt
-> anotherFile.txt
-> OneMOREfile.txt
这就是它的工作原理:
TPath tPath = new TPath("MyZip.zip\\myFolder\\tExtFile.txt");
System.out.println(tPath.toFile().getName()); //prints tExtFile.txt
如何做同样的事情但忽略所有大小写,像这样:
// note "myFolder" changed to "myfolder" and "tExtFile" to "textfile"
TPath tPath = new TPath("MyZip.zip\\myfolder\\textfile.txt");
System.out.println(tPath.toFile().getName()); // should print tExtFile.txt
上面的代码抛出FsEntryNotFoundException ... (no such entry)
它适用于普通的 java.io.File,不确定为什么不适用于 TrueZip 的 TFile,否则我错过了什么?
我的目标是仅使用小写的文件和文件夹来访问每个文件。
编辑:24-03-2017
假设我想从提到的 zip 存档 MyZip.zip 中的文件中读取字节
Path tPath = new TPath("...MyZip.zip\\myFolder\\tExtFile.txt");
byte[] bytes = Files.readAllBytes(tPath); //returns bytes of the file
上面的这个 sn-p 有效,但下面的这个无效(提到的抛出 -> FsEntryNotFoundException)。路径和文件相同,只是小写。
Path tPath = new TPath("...myzip.zip\\myfolder\\textfile.txt");
byte[] bytes = Files.readAllBytes(tPath);
【问题讨论】:
-
您正在开发什么平台(操作系统)?而且,以防万一存在差异,哪个工具生成了有问题的 ZIP 文件?我问这个问题是因为对我来说,这个 sn-p 总是打印我输入的内容,即使 ZIP 文件中的 ZIP 文件或路径根本不存在。所以可能你有更多的代码并且错误发生在其他地方。请分享SSCCE,而不仅仅是sn-ps。
-
感谢您的回复。我在 Windows 平台上工作。 zip 存档没有问题,因为它不适用于我迄今为止尝试的每个存档。正如我在帖子中提到的,我想执行小写选择。如果您可以尝试一下,请将路径中的任何字符替换为大写字母,它将不起作用。
.....\\myFolderInsideZip\\...为.....\\myfolderinsidezip\\... -
什么不起作用?正如我所说,仅实例化
TPath将适用于任何路径,甚至是不存在的路径(至少在 TrueZIP 7.7.9 中)。我想看看你以后如何使用TPath以及实际上什么不起作用。请尊重我的第一条评论并提供更多背景信息。这里的人不喜欢猜测(所以不是智力竞赛节目),我们想有效地提供帮助。 -
你刚刚添加的正是缺少的!正如我所说:您最初发布的代码不会引发任何异常。语句
Files.readAllBytes(tPath)是触发异常的原因!!!如果您隐藏导致您的问题的陈述,您如何期望和回答?现在至少我可以回答了。当我谈到 SSCCE 时,您可能一开始就听我的。请学习how to ask a question on SO。谢谢。