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文件中,而不是随机访问介质。”这正是我需要的信息。如果你把它作为一个答案,我会接受它。