Java Can';t从JAR加载属性
几天来,我一直在尝试让我的Java项目从位于JAR文件中的文件加载一些属性。但是,在尝试加载文件时,我经常得到一个空指针 文件夹层次结构的属性文件位于/data中,所有源文件位于/emp/**/** 代码Java Can';t从JAR加载属性,java,properties,jar,Java,Properties,Jar,几天来,我一直在尝试让我的Java项目从位于JAR文件中的文件加载一些属性。但是,在尝试加载文件时,我经常得到一个空指针 文件夹层次结构的属性文件位于/data中,所有源文件位于/emp/**/** 代码 如果data位于jar的根目录中,如果build_info.properties位于jar的数据目录中,并且jar位于类路径上,则getClass().getClassLoader().getResourceAsStream(“data/build_info.properties”)将找到该属
如果
data
位于jar的根目录中,如果build_info.properties
位于jar的数据目录中,并且jar位于类路径上,则getClass().getClassLoader().getResourceAsStream(“data/build_info.properties”)代码>将找到该属性文件。您还可以使用getClass().getResourceAsStream(“/data/build_info.properties”)代码>
如果getClass()
返回的类加载器加载的类与类路径上有jar的类不同,则可能会出现一些特殊情况。如果数据
位于jar的根目录中,如果build\u info.properties
位于jar的数据目录中,并且如果jar位于类路径上,则getClass().getClassLoader().getResourceAsStream(“数据/构建信息.properties”)代码>将找到该属性文件。您还可以使用getClass().getResourceAsStream(“/data/build_info.properties”)代码>
如果getClass()
返回的类加载器加载的类与类路径上包含jar的类不同,则可能会出现特殊性。您也可以尝试--
你也可以试试--
我对一个死气沉沉的简单控制台应用程序也有同样的问题。最终我发现了一个提示,我把我的控制台应用程序变成了一个swing应用程序,突然一切都正常了
上面链接中的解释确实有一定的意义:因为控制台应用程序在创建shell时会获得其属性(包括类路径),所以它不会知道JVM在/for/by期间定义的类路径。我对一个死气沉沉的简单控制台应用程序也有同样的问题。最终我发现了一个提示,我把我的控制台应用程序变成了一个swing应用程序,突然一切都正常了
上面链接中的解释确实有一定的道理:因为控制台应用程序在创建shell时会获得其属性(包括类路径),所以它不会知道JVM在/for/by期间定义的类路径。我相信所有这些都是正确的。如何确保JAR位于我的类路径上?喂?我真的可以使用help,你可以在程序中做的一件事就是尝试使用jar中的类。如果您得到一个NoClassDefFoundError或ClassNotFoundException(哪一个取决于您具体做了什么),那么它不会在那个jar中看到任何东西。这是安卓的来源吗?我对安卓知之甚少。如果是这样的话,你应该在你的问题中添加一个安卓标签。我相信所有这些都是真的。如何确保JAR位于我的类路径上?喂?我真的可以使用help,你可以在程序中做的一件事就是尝试使用jar中的类。如果您得到一个NoClassDefFoundError或ClassNotFoundException(哪一个取决于您具体做了什么),那么它不会在那个jar中看到任何东西。这是安卓的来源吗?我对安卓知之甚少。如果是这样,你应该在你的问题中添加一个安卓标签。
Properties defaultProps = new Properties();
try {
InputStream in = getClass().getClassLoader().getResourceAsStream("data/build_info.properties");
//InputStream in = new URL("file:data/build_info.properties").openStream();
defaultProps.load(in);
in.close();
} catch (FileNotFoundException e) {
//e.printStackTrace();
} catch (IOException e) {
//e.printStackTrace();
} catch (NullPointerException e){
Log.E("NPE- Properties not loaded", "properties");
revision = "Properties file not found";
}
if (defaultProps.getProperty("build.major.number") == null) {
Log.W("Properties not loaded", "properties");
revision = "Properties file not found";
} else {
Log.V("Properties Loaded Successfully", "properties");
revision = "Version: " + defaultProps.getProperty("build.major.number")
+ "." + defaultProps.getProperty("build.minor.number") + " "
+ "Revision: "
+ defaultProps.getProperty("build.revision.number");
}
Thread.currentThread().getContextClassLoader().getResourceAsStream("data/build_info.properties");