gpt4 book ai didi

java - ClassLoader.getResource 不断为现有资源返回 null

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:55 28 4
gpt4 key购买 nike

我正在尝试在我的 Runnable Jar 中包含一个本地数据库文件。该应用程序基于一个现有的开源项目,他们将文件与类一起放在包中。现在我将数据库文件移动到我在根项目文件夹中创建的“res” map 。编辑代码以查找数据库文件的新路径无效。这是一段代码:

 private static String defaultDBFileLocation() {
final URL geoDBFileURL = ClassLoader.getSystemClassLoader().getResource("res/GeoIP.dat");
// final URL geoDBFileURL = GeoIPServiceImpl.class.getResource("GeoIP.dat");
if (geoDBFileURL == null) {
return null;
}

try {
final URI geoDBFileURI = geoDBFileURL.toURI();
if (!geoDBFileURI.getScheme().equals("file")) {
// class file loaded not from plain directory on filesystem, e.g. from jar, network, etc.
return null;
}
final File geoDBFile = new File(geoDBFileURI);
return geoDBFile.getPath();
} catch (URISyntaxException e) {
return null;
} catch (IllegalArgumentException e) {
return null;
}
}

注释行是原始创建者用来获取文件的方式。它上面的线是我的新方法。此方法在此行不断返回 null:

if (geoDBFileURL == null)

有谁知道我在这里做错了什么?谢谢

最佳答案

您应该使用 Thread.currentThread().getContextClassLoader() ( javadoc ) 而不是系统类加载器,它是“新 ClassLoader 实例的默认委托(delegate)父级,通常是用于启动应用程序的类加载器”(reference)。

关于java - ClassLoader.getResource 不断为现有资源返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254465/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com