我有一个自定义的Java服务器。它使用一个外部xml配置文件。我有一些命令行选项可以帮助用户,显示帮助文件,设置端口等常用信息。
我最近添加了一个命令来为服务器生成默认配置文件。这是一个xml文件。在研究了我的选项之后,将默认的xml文件打包到jar中似乎是可行的方法,但是我显然缺少了一些东西。到目前为止,我的代码如下所示:
public class ResourceLoader {
private File outFile = null;
private Reader fileReader = null;
private Writer fileWriter = null;
private InputStream is = null;
private char[] buffer = null;
public ResourceLoader() {
outFile = new File("default-server.xml");
}
public void generateDefaultServerXml() {
is = ResourceLoader.class.getResourceAsStream("/default-server.xml");
if (is == null) {
System.out.println("Configuraiton File generation failed. The InputStream is null.");
} else {
fileReader = new InputStreamReader(is);
}
buffer = new char[4096];
FileOutputStream fos;
try {
fos = new FileOutputStream(outFile);
fileWriter = new OutputStreamWriter(fos);
while (fileReader.read(buffer) != -1) {
fileWriter.write(buffer, 0, buffer.length);
fileWriter.flush();
buffer = new char[4096];
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fileReader.close();
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面的代码在eclipse中运行时可以很好地运行,但是从头开始,在导出jar文件后,default-server.xml
当我从终端运行命令时,服务器无法找到该文件。
该文件本身main.resources
与其他一些配置文件以及上述类一起位于一个包中。
此后,我将其ResourceLoader.class
移至另一个程序包。这样做之后,服务器似乎在main.resources
包中找到了xml文件(InputStream
不是null
),但是生成的生成default-server.xml
文件为空。
同样,当我在eclipse中运行它时,这一切都很好,只有在导出项目并尝试从终端发出命令后,该过程才会失败。我究竟做错了什么?
上面的类是generateDefaultServerXml()
从服务器的main方法实例化并调用的。
编辑:我的写作道路default-server.xml
略有错误。既然我已经对其进行了调整,那么代码在Eclipse中运行时将完全按预期工作。以正确的方式读取资源,然后将其写入文件中的正确位置。但是,当我从jar文件尝试相同的操作时,它仍然不起作用。
当前行ResourceLoader.class.getResourceAsStream("/default-server.xml")
表示您正在尝试default-server.xml
从类路径的根目录加载命名的资源,或更简单地从jar文件的根目录加载资源。这意味着xml文件不应放在jar文件内的任何包中。
当您汇编jar文件然后jar tf my.jar
在其上运行时,您看到default-server.xml
文件了吗?它驻留在某个包中还是在jar文件的根目录中?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句