我有一个项目,我将把它转换为runnable jar文件。我使用ini4j
在我的ini文件中存储了一些配置。
当我只设置目录getConf = new Ini(new FileReader(path));
时它会起作用,但当我使用getResourceAsStream()
时它不起作用
public class IniReader {
// When I set it like that, it works..
private static String path = "../conf.ini";
public static String readIni(String val, String getOb, String fetchOb) {
Ini getConf = null;
try {
// When I set it like that, it works..
getConf = new Ini(new FileReader(path));
// I want to use this version but I am getting null error.
//getConf = new Ini(new BufferedReader(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("conf.ini"))));
} catch (InvalidFileFormatException e) {
System.err.print("Error InvalidFileFormat : " + e.getMessage() + "\n");
e.printStackTrace();
} catch (FileNotFoundException e) {
System.err.print("Error FileNotFoundException : " + e.getMessage() + "\n");
e.printStackTrace();
} catch (IOException e) {
System.err.print("Error IOException : " + e.getMessage() + "\n");
e.printStackTrace();
}
return val = getConf.get(getOb).fetch(fetchOb);
}
当我尝试阅读我的iniFile时,我收到以下错误;
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:113)
at org.ini4j.Ini.load(Ini.java:104)
at org.ini4j.Ini.<init>(Ini.java:56)
at com.test.ttf.IniReader.readIni(IniReader.java:28)
at com.test.ttf.SlashSCR.InitProg(SlashSCR.java:116)
at com.test.ttf.InitProg.main(InitProg.java:18)
这是我想要阅读的.ini文件
修改
我也尝试了以下内容;
Ini getConf= new Ini();
getConf.load(Thread.currentThread().getContextClassLoader().getClass().getResourceAsStream("../conf.ini"));
答案 0 :(得分:1)
如果要从jar加载配置,可以使用路径getResource()
和getResourceAsStream()
函数。
NullPointerException
表示(很可能,因为在一行上很难说很多语句)资源未找到(默认返回null
)
如果要从本地文件加载它,那么您只需使用原始方法(使用FileReader
)。但是,您必须设置相对于执行目录的路径(从中运行java
的位置)。这很可能与您的jar目录相同。在这种情况下,您应该使用"conf.ini"
而不是"../conf.ini"