Java 从JAR存档中获取RandomAccessFile

Java 从JAR存档中获取RandomAccessFile,java,file,jar,bioinformatics,Java,File,Jar,Bioinformatics,摘要: 我有一个程序,我想作为一个jar文件发布 它依赖于三个二进制格式的大资源文件(每个700MB)。文件内容可以通过索引轻松访问,因此我的解析器将这些文件读取为RandomAccessFile-对象 因此,我的目标是通过File对象从jar访问资源文件 我的问题: 当从我的文件系统访问资源文件时,没有问题,但我的目标是将它们打包到程序的jar文件中,因此用户不需要自己处理这些文件 到目前为止,我发现访问打包在jar中的文件的唯一方法是通过InputStream(由class.getResou

摘要:

我有一个程序,我想作为一个
jar
文件发布

它依赖于三个二进制格式的大资源文件(每个700MB)。文件内容可以通过索引轻松访问,因此我的解析器将这些文件读取为
RandomAccessFile
-对象

因此,我的目标是通过
File
对象从
jar
访问资源文件

我的问题:

当从我的文件系统访问资源文件时,没有问题,但我的目标是将它们打包到程序的
jar
文件中,因此用户不需要自己处理这些文件

到目前为止,我发现访问打包在
jar
中的文件的唯一方法是通过
InputStream
(由
class.getResourceAsStream()
生成),这对我的应用程序完全没有用,因为如果不使用
RandomAccessFile
,从开始到结束读取这些文件会太慢

出于同样的原因,将文件内容复制到文件中,在运行时读取并删除它是不可取的

有人能确认没有办法实现我的目标或提供一个解决方案(或一个提示,让我自己解决问题)

我目前的发现:

我找到了答案,如果我理解了答案,它会说没有办法解决我的问题:

.jar文件中的资源不是文件,因为操作系统可以通过普通的文件访问API直接访问它们

而且,由于java.io.File正好代表这种类型的文件(即,在操作系统中看起来像文件的东西),因此它不能用于引用.jar文件中的任何内容

一种可能的解决方法是将资源提取到临时文件中,并用文件引用该文件

我想我可以理解它背后的原因,但它已经有八年多的历史了,虽然我在文件系统和归档方面没有受过很好的教育,但我知道Java语言从那时起已经有了很大的发展,所以可能还有希望:)

可能无用的背景信息:


这些文件是
2bit
格式的基因组,我使用
biojava
中的
TwoBitParser
通过包装类
TwoBitFacade
?。可以找到
Javadocs

资源不是文件,它们存在于JAR文件中,JAR文件不是随机访问介质

“所以我的目标是通过文件对象从jar访问资源文件。”所以你的目标在术语上已经是矛盾的。资源不是文件。它们生活在一个JAR文件中,而不是一个随机访问介质。这里的一切都是自相矛盾的。谢谢@EJP,“资源不是文件。它们生活在一个JAR文件中,而不是随机访问介质。”这正是我需要的信息。如果你把它作为一个答案,我会接受它。