打开文件;首先尝试文件系统,然后尝试 JAR
我试图让我的应用程序透明地加载资源(二进制文件):
如果该文件存在于当前目录下,请打开它。
如果没有,请尝试查找当前的 JAR 文件(如果适用)。
如果没有,请尝试查找其他 JAR 文件。 (这是可选的,我不介意明确指定哪些 JAR 文件。)
到目前为止,我知道打开本地文件的 File
和具有 getResource 的
表示 JAR 内容。ClassLoader
*
有没有一个类可以将两者结合起来?如果没有,我该如何自己写呢?我应该编写一个也检查本地文件系统的ClassLoader
吗?使用文件
? Java 非常不熟悉,甚至不知道什么是好的返回类型。InputStream
?)
谢谢
(我对 我所说的“文件”是指“路径”,例如“data/texture1.png”。
I'm trying to have my application load a resource (binary file) transparently:
If the file exists under the current directory, open it.
If not, try looking in the current JAR file if applicable.
If not, try looking in other JAR files. (This is optional and I don't mind explicitly specifying which JAR files.)
So far I know of File
which opens a local file and ClassLoader
which has getResource*
for JAR contents.
Is there a class which combines the two? If not, how should I go about writing it myself? Should I write a ClassLoader
which also checks the local filesystem? Using File
? (I'm very unfamiliar with Java and don't even know what's a good type to return. InputStream
?)
Thanks
P.S. By "file" I mean "path", e.g. "data/texture1.png".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
执行#1 和#3 非常简单。执行#2(仅查看当前 JAR)要困难得多,因为它需要您弄清楚您使用的 JAR
如果您想首先检查文件系统,否则从类路径加载,则类似于:
如果您想更喜欢加载首先从同一个 JAR 文件中,您需要找出它在哪里。查看确定类来自哪个 JAR 文件了解更多信息有关确定要从中加载资源的 JAR 文件的信息。
Doing #1 and #3 is pretty easy. Doing #2 (just looking in the current JAR only) is much harder as it requires you figuring out what JAR you
If you wanted to check the filesystem first, otherwise load from classpath, it would be something like:
If you want to prefer loading from the same JAR file first, you will need to figure out where it is. Check out Determine which JAR file a class is from for more info on figuring out the JAR file you want to load the resource from.
URLClassLoader 应该能够加载两者如果文件路径位于 jar 前面的类路径上,则首先尝试文件路径。
关于您的评论:
工作。这就是春天的人们来的原因
与资源抽象一起。
在这里阅读 。
对于这个问题: 加载文件
相对于执行的 jar
文件。问题类似于
你的。
A URLClassLoader should be able to load both and try the file path first if the file path is on the class path ahead of the jar.
Regarding your comments:
work. That's why the Spring guys came
up with the Resource abstraction.
Read about it here.
to this Question: Loading a file
relative to the executing jar
file. The problem is similar to
yours.
当前 jar 文件和当前目录不是 JVM 中的概念,就像运行 shell 脚本时那样。您需要指定一个用于加载您感兴趣的文件的目录,例如在执行 JVM 时使用系统属性:
然后检索此属性:
现在,当谈论 JAR 文件时,所有在上明确指定的 JAR 文件启动 JVM 时的类路径由 ClassLoader 加载。您可以通过以下方式获取特定类的 ClassLoader:
请注意,将搜索当前类加载器加载的任何 jar 文件。
Current jar file and current directory are not concepts in the JVM like they are when you're running a shell script. You would need to specify a directory to be used for loading the files that you're interested in, such as with a system property while executing the JVM:
Then retrieve this property:
Now when talking about JAR files, all JAR files specified explicitly on the classpath when you start the JVM are loaded by the ClassLoader. You can get the ClassLoader of a specific class by:
Note that any jar file loaded by the current class loader is searched.