如何从可执行的Jar文件中加载xml资源文件并将其保存到jar所在的文件夹中?

我有一个自定义的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

引用资源文件夹而不是jar中的内容

在.jar中加载freemarker模板文件夹

如何从资源文件夹加载文件?

如何从jar文件中获取资源“文件夹”?

如何从.jar加载文件夹?

如何上传视频并将其保存到Codeigniter中的文件夹?

如何将资源文件夹从jar复制到程序文件中

使用Android中的kotlin下载文件并将其保存到下载文件夹

未加载资源文件夹中的HEIC图像

如何将图像保存到资源文件夹java swing

最终jar中src / main下的Maven包资源文件夹

获取文件夹中特定文件的目录并将其保存到变量中

问题-将图像文件保存到iPhone中的资源文件夹

无法从jar加载资源文件

剥离CSV文件中的列并将其保存到其他文件夹

Java将资源文件夹保存到磁盘文件夹

如何从资源文件夹中加载图像并将其设置为unity5中的UI图像的源图像

访问jar中的资源文件夹

将文本转换为文件并将其保存到文件夹中

循环执行excel文件,然后将其保存到新文件夹python pandas中

制作jar时,图像未从资源文件夹中的javafx css中加载

如何从自己的项目中获取Jar文件并将其写入Windows文件夹

如何使用 codeigniter 生成具有相同代码的 HTML 文件并将其保存到特定文件夹中

如何使资源文件在 jar 中可用?

运行.jar时如何使用maven解压资源文件夹

如何在 jar/war 的资源文件夹中创建一个 png?

Jar 无法访问资源文件夹

从 jar 文件加载资源文件的问题

WinForms如何打开资源文件夹中的文件