代码之家  ›  专栏  ›  技术社区  ›  Papi

使用资源文件(DB连接参数、图像等)分发Java应用程序的最佳方式

  •  0
  • Papi  · 技术社区  · 6 年前

    我想发布一个使用Java属性文件连接到外部数据库的Java应用程序。我的问题是,一旦我的项目被导出为Jar文件(然后使用Launch4j导出为EXE),并位于与项目根文件夹不同的位置,与数据库的连接就会失败,并且我的大多数图片都不会加载。

    关于连接,我尝试了几种方法来读取外部文件中写入的连接属性,该文件位于源文件夹中:

    Project structure

    代码:

    Code reading the properties file with the connection parameters

    我还尝试让项目根文件夹中的属性文件:在运行项目时双向工作,但在启动jar或exe时失败。

    首先,我认为这只是因为我的项目的导出,可能是由于一些错误的设置而失败。但我开始认为,我可能对如何将资源导入Java项目有错误的理解,甚至认为我在Stackoverflow上遵循了该主题的几个主题。

    因此:

    • 以可以将属性文件导出到Jar/exe文件的方式包含属性文件的最佳方式是什么?
    • 或者,在生成Jar之后,是否应该通过在生成exe时引用这些文件来包含这些文件?那会怎样?

    由于连接文件包含一些合理的数据(即连接到数据库的密码),我希望在导出Jar/exe文件后,有一种官方的方法来保护该文件不受不必要的访问。

    非常感谢你的帮助。 如果需要,我可以提供更多的代码和图片。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Joop Eggen    6 年前

    资源(如jar中的资源)不是文件(在文件系统上)。使用

    getClass().getResourceAsStream("/conf/connexxion.properties");`
    

    对于那个地方 conf 在下面 /resources

        2
  •  0
  •   kavita    6 年前
    String configFile = "conf/connexion.properties";
    InputStream inputStream = this.class.getClassLoader().getResourceAsStream(configFile);
    Properties props = new java.util.Properties();
    if (inputStream  != null) {
        props.load(in);
    }else{
        System.out.println("File not found");
    }
    

    (或)

    Properties prop = new Properties();
    URL url = ClassLoader.getSystemResource("/conf/connexion.properties");
    if (url != null)
         prop.load(url.openStream());
    }