包含一个Jar文件的属性文件

Isu*_*uru 7 java database executable-jar properties-file

我写了一个小应用程序.我已将数据库特定信息放在属性文件中.

db.url=jdbc:mysql://localhost:3306/librarydb
db.user=root
db.passwd=pas$w0rd
Run Code Online (Sandbox Code Playgroud)

当我构建应用程序以获取可执行jar文件时,属性文件包含在其中.将这些信息放在属性文件中的全部目的是允许用户更改这些信息,但这使得它变得不可能.

如何包含不包含jar文件的属性文件?有点像你在.NET应用程序中使用AppSettings文件.

我是Java的新手,所以如果你能把它分解为一系列步骤我会很感激.

谢谢.

编辑:

这就是我从程序中的属性文件中获取值的方法.

public class DatabaseHandler {

    public static Connection connectToDb() {
        Connection con = null;
        Properties props = new Properties();
        InputStream in = null;

        try {
            in = DatabaseHandler.class.getResourceAsStream("database.properties");
            props.load(in);
            in.close();

            String url = props.getProperty("db.url");
            String user = props.getProperty("db.user");
            String password = props.getProperty("db.passwd");

            con = DriverManager.getConnection(url, user, password);
        } catch (Exception ex) {        
            Logger.getLogger(DatabaseHandler.class.getName()).log(Level.SEVERE, null, ex); 
        }
            return con;
    }

}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 6

你是对的.如果属性可由用户修改,那么将它们放在JAR中的属性文件中是行不通的

有几种方法:

  • 您可以将属性放在存储在文件系统中的属性文件中.问题是搞清楚其中的文件系统来存储它们:

    • 在UNIX/Linux上,存在用于存储系统范围和每用户配置属性的约定,但这些属性有点松散,并且处于一种不稳定的状态(例如,某些"桌面"框架具有其自己的偏好机制.

    • 我相信Windows有类似的约定.

    • 方法的问题可能是权限问题(您不希望一个用户更改另一个用户的首选项),甚至可能出现只读文件系统等问题.

    • 如果要在文件系统中使用属性文件,将位置硬连接到代码中是个坏主意.通过命令行参数和/或可以使用该-D选项设置的"系统属性"使其可配置.

  • 在Windows上,您可以将属性放入Windows注册表中.但是您需要使用第三方库来执行此操作.当然,这不是便携式的 - 它不适用于非Windows平台.

  • 您可以使用Java Preferences API.这可以跨多个平台移植,但它是一个以Java为中心的解决方案; 即它不适合平台的"常规方式"做事.

简而言之,从各个方面来看都没有理想的解决方案.


但是,一旦确定了如何存储首选项,就可以编写应用程序,以便它使用JAR文件中的属性文件来提供默认或初始设置.


Chr*_*ris 0

不要对属性文件的位置进行硬编码。您的方法应该是从类路径流式传输文件。

如果没有,更好的方法是指向一个以特定数据格式(例如 JSON)返回属性信息的 URL。

如果你有 JAR,请检查一下

如果您的应用程序是 WAR,请检查WAR 中的属性