我正在尝试从我的 JAR 本地目录读取 config.properties
文件,该文件是从网站运行的。我尝试了一堆不同的代码,从流式传输到获取类路径等。最后,我现在正在尝试的是以下代码:
FileInputStream f = new FileInputStream("./config.properties");
if(f != null) {
prop.load(f);
db = prop.getProperty("database");
dbuser = prop.getProperty("dbuser");
dbpass = prop.getProperty("dbpass");
host = prop.getProperty("host");
iloc = prop.getProperty("iloc");
}
在从 Netbeans 内部测试和运行时,它的评估效果非常好,但是当我将它放在网络上并运行它时,它就不再找到配置文件,即使它是同一目录中的相同文件。我尝试过使用 ./
和不使用,结果仍然相同。
最佳答案
你必须有一些绝对值或一些运行时参数。我们所做的是将应用程序主页作为系统属性。因此,当在 Windows 上启动 java 时,它是/app1,但在服务器上启动 java 时,它是/etc/app1
启动 java 或 javaw 时使用 -D
java -Dapp.home=/etc/app1 -Dapp.other=somevalue my.package.AppMain
然后在我们的应用程序中,我们有一个 FileUtils 类,它在静态 init 中读取此内容,并为其提供静态 getter。
示例
public class FileUtils{
private static File appHome = null;
static{
String home = System.getProperty("app.home");//-D that you specify or some standard that java has see javadoc
if(home == null){
//logger as needed
home = "/app1";
}
appHome = new File(home);
}
public static File getAppHome(){
return appHome;
}
...
网站 - 运行 java 作为 Web 服务器/应用程序服务器也有一个文件系统。如果您无权访问它,那么您也无法编辑配置,对吗?如果您知道配置的路径但无法更改 java 命令,您可以执行以下操作:
建议1 在您的开发系统上创建一个任意文件,例如/dev/randome4343433Name.txt 如果该文件存在,您知道您在开发中并使用该路径,否则请使用服务器中的路径。
建议2 或者使用服务器上的路径。 即使服务器是 Linux 并且开发是 Windows,您也可以只使用斜杠/并在开发驱动器中创建相同的文件系统,但不要在代码中提及驱动器号。因此,如果在服务器上位于/etc/app1/config.txt ,那么在本地驱动器上,您开始创建一个 etc\app1 文件夹并将配置放在那里,然后 uin 代码使用“/etc/app1/config.txt”
关于Java从Web目录读取属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15821933/