java-读取与jar文件相同的目录中的配置文件

时间:2018-12-03 10:38:12

标签: java

我在Intellij中有一个简单的程序,我只是为了测试读取配置文件的文件路径而制作的。

我创建了一个简单的测试用例,其中我将使用计时器以N个间隔(其中N以毫秒为单位,并且N是可配置的)定期打印“ Hello world”。

这是代码:

public void schedule() throws Exception {

       Properties props=new Properties();

        String path ="./config.properties";
        FileInputStream fis=new FileInputStream(path);
        BufferedReader in1=new BufferedReader(new InputStreamReader(fis));
       // InputStream in = getClass().getResourceAsStream("/config.properties");

        props.load(in1);
        in1.close();
        int value=Integer.parseInt(props.getProperty("value"));






        Timer t=new Timer();
        t.scheduleAtFixedRate(
                new TimerTask() {
                    @Override
                    public void run() {
                      // System.out.println("HELEOELE");

                        try {
                           // test.index();
                            System.out.println("hello ");
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
                },
              0,
                value);





    }

我所做的是我在配置文件中将值设置为N,任何人都可以更改它而无需触摸实际代码。因此,我编译了jar文件,并将config.properties和jar文件都放在了相同的文件夹或目录中。我希望能够将N更改为可变的,所以我不需要每次都重新编译jar。

注意:配置属性文件是手动创建的,并与jar放在同一目录中。我正在命令提示符下执行jar。

但是,当我尝试运行它时,似乎无法识别文件路径。

"main" java.io.FileNotFoundException: .\config.properties (The system cannot find the file specified)

我研究了许多有关读取jar文件之外的配置文件的问题,但这些问题都不适合我。我在这里犯错了吗?

1 个答案:

答案 0 :(得分:2)

./config.properties是指向当前工作目录中的config.properties文件的相对路径。

除非通过System.setProperty("user.dir", newPath)进行更改,否则当前工作目录将是您启动了JVM的目录,当前正在处理您的代码。

要使您的jar保持当前状态,您有两种可用方法:

  1. config.properties文件复制到您从中启动jar的目录中
  2. 将正在启动jar的目录更改为包含config.properties(和jar)的目录

您还可以考虑让用户指定从何处获取属性文件:

String path = System.getProperty("propertiesLocation", "config.properties");

然后,您可以在调用jar时为属性文件指定位置:

java -jar /path/to/your.jar -DpropertiesLocation=/path/to/your.properties

或者像以前一样调用它,以在当前工作目录的默认位置config.properties上搜索属性。