java包含一个属性文件和一个Jar文件
我写了一个小应用程序。我已将特定于数据库的信息放在属性文件中
db.url=jdbc:mysql://localhost:3306/librarydb
db.user=root
db.passwd=pas$w0rd
当我构建应用程序以获取可执行jar文件时,属性文件包含在其中。将这些信息放在属性文件中的全部目的是允许用户更改这些信息,但这样做是不可能的
如何包含一个属性文件,而jar文件不在其中?有点像在中使用AppSettings文件。NET应用程序
我对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;
}
}
# 1 楼答案
你说得对。如果用户打算修改这些属性,那么将它们放在JAR中的属性文件中是行不通的
有两种方法:
您可以将属性放入存储在文件系统中的属性文件中。问题在于找出文件系统中存储它们的位置:
在UNIX/Linux上,对于在何处存储系统范围和每个用户的配置属性有一些约定,但这些约定有点松散,并且处于一种不断变化的状态(例如,某些“桌面”框架有自己的首选机制。
我相信Windows也有类似的约定
这种方法的问题可能是权限问题(您不希望一个用户更改另一个用户的首选项),甚至可能是只读文件系统等的问题
如果要在文件系统中使用属性文件,那么将该位置硬连接到代码中是个坏主意。通过命令行参数和/或可使用
-D
选项设置的“系统属性”进行配置在Windows上,可以将属性放入Windows注册表。但您需要使用第三方库来完成此操作。当然,这不是可移植的——它在非Windows平台上不起作用
您可以使用Java Preferences API。这可以跨多个平台移植,但它是一个以Java为中心的解决方案;i、 e.它不符合平台的“正常方式”
简言之,从各个角度来看,没有一个解决方案是理想的
但是一旦您决定了如何存储您的首选项,您就可以编写您的应用程序,以便它使用JAR文件中的属性文件来提供默认或初始设置
# 2 楼答案
您可以改为从类路径加载属性文件。这使您能够在jar内部绑定属性文件,但也可以在jar外部绑定属性文件。它只需要位于正在运行的应用程序的类路径上
您可以通过以下方式执行此操作:
# 3 楼答案
而不是
试一试
# 4 楼答案
不要硬编码属性文件的位置。您的方法应该是从类路径流式传输文件
如果不是,更好的方法是指向一个URL,该URL以特定的数据格式(比如JSON)返回属性信息
如果您有JAR,请签出this
如果您的应用程序是WAR,请检查properties in WAR