有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java开放文件;首先尝试文件系统,然后尝试JARs

我试图让我的应用程序透明地加载资源(二进制文件):

如果文件存在于当前目录下,请将其打开
如果没有,请尝试查看当前的JAR文件(如果适用)
如果没有,请尝试查找其他JAR文件。(这是可选的,我不介意明确指定哪些JAR文件。)

到目前为止,我知道File可以打开一个本地文件,而ClassLoader可以getResource*存储JAR内容

有一个结合了这两者的课程吗?如果没有,我该如何着手自己写呢?我应该写一个ClassLoader也检查本地文件系统吗?使用File?(我对Java非常不熟悉,甚至不知道返回哪种类型好。)

谢谢

注意,“文件”指的是“路径”,例如“data/texture1.png”


共 (2) 个答案

  1. # 1 楼答案

    当前jar文件和当前目录在JVM中不是像运行shell脚本时那样的概念。您需要指定一个目录,用于加载感兴趣的文件,例如在执行JVM时使用系统属性:

    java -Ddirectory.to.scan=/home/aib
    

    然后检索此属性:

    String dir = System.getProperty("directory.to.scan");
    

    现在,当谈到JAR文件时,启动JVM时在类路径上显式指定的所有JAR文件都由类加载器加载。您可以通过以下方式获取特定类的类加载器:

    InputStream is = <Your class>.class.getClassLoader().getResourceAsStream("binary file");
    

    注意,当前类加载器加载的任何jar文件都会被搜索

  2. # 2 楼答案

    如果文件路径位于jar前面的类路径上,那么URLClassLoader应该能够同时加载这两个文件,并首先尝试文件路径


    关于你的评论: