要点:
我有一个程序要作为单个jar
文件发送。
它取决于二进制格式的三个大资源文件(每个700MB)。通过索引可以轻松访问文件内容,因此我的解析器将这些文件作为RandomAccessFile
- 对象读取。
所以我的目标是通过jar
对象访问File
资源文件。
我的问题:
从我的文件系统访问资源文件时,没有问题,但我的目标是将它们打包到程序的jar
文件中,因此用户不需要自己处理这些文件。
到目前为止,我发现访问jar
中打包的文件的唯一方法是通过InputStream
(由class.getResourceAsStream()
生成),这对我的应用程序来说完全没用,因为它会是从头到尾阅读这些文件要慢得多,而不是使用RandomAccessFile
。
出于同样的原因,将文件内容复制到文件中,读取文件并在运行时将其删除是没有选择的。
有人可以确认没有办法实现我的目标或提供解决方案(或提示,以便我自己可以解决)吗?
到目前为止我发现了什么:
我找到了this回答,如果我理解答案就说没有办法解决我的问题:
.jar文件中的资源不是操作系统可以通过普通文件访问API直接访问它们的文件。
由于java.io.File恰好代表那种文件(即看起来像操作系统的文件),它不能用于引用.jar文件中的任何内容。
可能的解决方法是将资源提取到临时文件,并使用文件引用该文件。
我想我可以按照它背后的推理,但它现在已经超过八年了,虽然我在文件系统和档案方面没有受过很多教育,但我知道Java语言从那时起已经发展很多,也许有希望? :)
可能无用的背景信息:
这些文件是2bit
格式的基因组,我使用TwoBitParser
中的biojava
通过包装类TwoBitFacade
?可以找到Javadocs
here和here。
答案 0 :(得分:1)
资源不是文件,它们存在于JAR文件中,该文件不是随机访问介质。