来自ZipEntry(java)的RandomAccessFile

来自ZipEntry(java)的RandomAccessFile,java,zip,Java,Zip,我在寻找一些关于通过RandomAccessFile阅读zip档案的东西。所以,我发现了这个例子: 但是它对我不起作用,它告诉我没有这样的文件或目录,但是文件路径是正确的。这个例子不正确吗 更新:来自docs.oracle.com: RandomAccessFile(字符串名称、字符串模式) 创建一个随机访问文件流,以从具有指定名称的文件中读取,也可以选择向其写入 奇怪的是,在本例中,他们试图用entryName作为“name”参数创建RAF 还有一个同样的例子:我认为这是一个未经审查的代码出现

我在寻找一些关于通过RandomAccessFile阅读zip档案的东西。所以,我发现了这个例子: 但是它对我不起作用,它告诉我没有这样的文件或目录,但是文件路径是正确的。这个例子不正确吗

更新:来自docs.oracle.com:

RandomAccessFile(字符串名称、字符串模式)

创建一个随机访问文件流,以从具有指定名称的文件中读取,也可以选择向其写入

奇怪的是,在本例中,他们试图用entryName作为“name”参数创建RAF


还有一个同样的例子:

我认为这是一个未经审查的代码出现在互联网上并导致无休止的问题的例子

这两个示例中的代码不可能做任何有用的事情。代码执行任何操作的唯一方法是,如果zip文件的内容已经解压缩到包含zip文件的文件夹中

Long和short:不能将RAF与ZipEntry一起使用,因为ZipEntry引用的是加密流。您不能对流进行随机访问(除非您对整个内容进行缓冲)

我很感兴趣的是:

a) java提示文章中的代码没有遵循java的正确命名约定 b) 这两篇文章中的代码惊人地相似


下面的示例代码展示了如何正确使用ZipInputStream:

我觉得很有可能您的文件名是错误的,很可能是由于未替换的反斜杠。您是否更改了代码?没有,我只是更改了这个字符串
ZipInputStream ZipInputStream=new-ZipInputStream(new-FileInputStream(“filename”)
-我将
/home/123456/archive.zip放置在
文件名
中,而不是
文件名
,这就是引发异常的行?您是如何验证该文件存在且可读的?否,此行引发异常
RandomAccessFile rf=new RandomAccessFile(entryName,“r”)文件是可读的,因为如果我使用
ZipFile
及其方法
getInputStream(ZipEntry)
它工作正常,这就是为什么在您的问题中进行描述性描述很重要。。。当它失败时,
entryName
的值是多少?