从JAR存档获取RandomAccessFile

时间:2018-06-12 09:52:24

标签: java file jar bioinformatics

要点:

我有一个程序要作为单个jar文件发送。

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

所以我的目标是通过jar对象访问File资源文件。

我的问题:

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

到目前为止,我发现访问jar中打包的文件的唯一方法是通过InputStream(由class.getResourceAsStream()生成),这对我的应用程序来说完全没用,因为它会是从头到尾阅读这些文件要慢得多,而不是使用RandomAccessFile

出于同样的原因,将文件内容复制到文件中,读取文件并在运行时将其删除是没有选择的。

有人可以确认没有办法实现我的目标或提供解决方案(或提示,以便我自己可以解决)吗?

到目前为止我发现了什么:

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

  

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

     

由于java.io.File恰好代表那种文件(即看起来像操作系统的文件),它不能用于引用.jar文件中的任何内容。

     

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

我想我可以按照它背后的推理,但它现在已经超过八年了,虽然我在文件系统和档案方面没有受过很多教育,但我知道Java语言从那时起已经发展很多,也许有希望? :)

可能无用的背景信息:

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

1 个答案:

答案 0 :(得分:1)

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