转换为可运行的 Jar 文件时读取 .ini 文件
Reading .ini File When Converted into Runnable Jar File
我有一个项目,我要把它转换成可运行的 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"));
当你想从jar中加载配置时,你可以使用路径getResource()
和getResourceAsStream()
函数。
NullPointerException
表示(最有可能,因为总是很难用一行中的许多语句来判断)找不到资源(默默地 returns null
)
如果你想从本地文件加载它,那么你只需按照原来的方法(使用 FileReader
)。但是,您必须设置相对于执行目录的路径(您 运行 java
来自的位置)。这很可能是与您的 jar 相同的目录。在这种情况下,您应该使用 "conf.ini"
而不是 "../conf.ini"
我有一个项目,我要把它转换成可运行的 jar 文件。我使用 ini4j
.
当我简单地设置目录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"));
当你想从jar中加载配置时,你可以使用路径getResource()
和getResourceAsStream()
函数。
NullPointerException
表示(最有可能,因为总是很难用一行中的许多语句来判断)找不到资源(默默地 returns null
)
如果你想从本地文件加载它,那么你只需按照原来的方法(使用 FileReader
)。但是,您必须设置相对于执行目录的路径(您 运行 java
来自的位置)。这很可能是与您的 jar 相同的目录。在这种情况下,您应该使用 "conf.ini"
而不是 "../conf.ini"