打开文件; 首先尝试文件系统,然后尝试JAR

aib*_*aib 2 java jar classpath classloader

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

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

到目前为止,我知道File哪个打开一个本地文件,ClassLoader哪个有getResource*JAR内容.

是否有一个结合了两者的课程?如果没有,我该如何自己写呢?我应该写一个ClassLoader也检查本地文件系统?用File?(我对Java非常熟悉,甚至不知道返回什么样的好类型.InputStream?)

谢谢

PS"文件"我的意思是"路径",例如"data/texture1.png".

Rob*_*rco 6

做#1和#3非常简单.做#2(仅查看当前的JAR)要困难得多,因为它需要你弄清楚你是什么JAR

如果你想首先检查文件系统,否则从类路径加载,它将是这样的:

public java.io.InputStream loadByName(String name) {
  java.io.File f = new java.io.File(name);
  if (f.isFile()) {
    return new FileInputStream(f);
  } else {
    return getClass().getResource(name);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望首先从同一个JAR文件加载,则需要确定它的位置.检查确定类所属的JAR文件,以获取有关确定要从中加载资源的JAR文件的更多信息.