Java从Web目录读取属性文件

标签 java netbeans applet

我正在尝试从我的 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/

相关文章:

java - HSQLDB 带有 mssql 关键字表名

java - 2x2 按钮网格布局

java - 在android中使用反射的缺点?

java - 将多个 java 程序集成为一个程序

Java 安全错误

java - 在 Retrofit 中将表单数据发送到服务器

netbeans - 像 Netbeans 一样在 VS Code 中的新行周围自动添加引号

java - 如何用 java 读取/写入 NetBeans 项目本身中的文件

java - 通过 URL 数据嵌入 Java 小程序

Java Applet 无法清除屏幕上的文本