总结:
我有一个程序我想作为一个单一的
jar
文件。
它依赖于三个二进制格式的大资源文件(每个700MB)。通过索引可以很容易地访问文件内容,因此我的解析器将这些文件读取为
RandomAccessFile
-对象。
所以我的目标是从
罐子
通过
File
物体。
我的问题:
当从我的文件系统访问资源文件时,没有问题,但我的目标是将它们打包到
罐子
程序的文件,所以用户不需要自己处理这些文件。
到目前为止,我找到的唯一方法是访问
罐子
是通过
InputStream
(产生者
class.getResourceAsStream()
,这对我的应用程序完全没有用处,因为从头到尾读取这些文件要比使用
随机存取文件
.
出于同样的原因,将文件内容复制到文件中、读取并在运行时删除是没有选择余地的。
有人能确认没有办法实现我的目标或提供一个解决方案(或一个提示,让我自己解决)?
到目前为止我发现:
我发现
this
如果我明白了答案,它会说没有办法解决我的问题:
jar文件中的资源不是文件,因为操作系统可以通过普通的文件访问api直接访问它们。
而且由于java.io.file完全代表了那种文件(即在操作系统中看起来像文件的东西),所以它不能用于引用.jar文件中的任何内容。
一种可能的解决方法是将资源提取到一个临时文件中,并用一个文件引用它。
我认为我可以遵循它背后的推理,但是它已经超过八年了,当我在文件系统和档案方面还没有受过很好的教育的时候,我知道Java语言从那时起已经发展了很多,所以也许还有希望吗?:)
可能无用的背景信息:
这些文件是
2bit
格式和我使用
TwoBitParser
从
biojava
通过包装类
TwoBitFacade
?. The
Javadocs
可以找到
here
和
here
.