java獲取配置文件參數,java 讀取 jar properties_java:如何讀取properties文件內容

 2023-10-08 阅读 22 评论 0

摘要:2015-01-28使用netbeans創建項目首先使用netbeans 8創建java項目HelloJava,布局如下:src 目錄保存著編寫的代碼, build 保存編譯好的class文件、資源文件等。user.properties 內容如下:name=rootpassword=hi使用絕對路徑讀取類me.letian.

2015-01-28

使用netbeans創建項目

首先使用netbeans 8創建java項目HelloJava,布局如下:

ae0fa8cf2a89ee2d92267450f5bf8b0b.png

src 目錄保存著編寫的代碼, build 保存編譯好的class文件、資源文件等。

user.properties 內容如下:

name=root

password=hi

使用絕對路徑讀取

類me.letian.HelloJava內容如下:

package me.letian;

import java.io.IOException;

import java.io.InputStream;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.Properties;

public class HelloJava {

public static void main(String[] args) throws IOException {

Properties props = new Properties();

String propsPath = "/home/letian/NetBeansProjects/HelloJava/build/classes/me/letian/user.properties";

try (InputStream in = Files.newInputStream(Paths.get(propsPath))) {

props.load(in);

System.out.println(props.getProperty("name"));

}

}

}

使用netbeans執行該類中的main方法,結果如下:

root

打包成jar文件:在菜單“Run”中選擇“Clean and Build Project”,將會把項目打包成jar并放在項目下的dist目錄下。

$ cd /home/letian/NetBeansProjects/HelloJava/dist/

$ jar tvf HelloJava.jar # 查看jar內容

0 Wed Jan 28 21:01:16 CST 2015 META-INF/

210 Wed Jan 28 21:01:14 CST 2015 META-INF/MANIFEST.MF

0 Wed Jan 28 21:01:16 CST 2015 me/

0 Wed Jan 28 21:01:16 CST 2015 me/letian/

2030 Wed Jan 28 21:01:16 CST 2015 me/letian/HelloJava.class

21 Wed Jan 28 21:01:16 CST 2015 me/letian/user.properties

$ java -jar HelloJava.jar me.letian.HelloJava # 執行

root

使用相對路徑

使用相對路徑,不能簡單的將propsPath設值為 user.properties :

package me.letian;

import java.io.IOException;

import java.io.InputStream;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.Properties;

public class HelloJava {

public static void main(String[] args) throws IOException {

Properties props = new Properties();

String propsPath = "user.properties";

System.out.println("" + Paths.get(propsPath).toAbsolutePath()); // 輸出絕對路徑

try (InputStream in = Files.newInputStream(Paths.get(propsPath))) {

props.load(in);

System.out.println(props.getProperty("name"));

}

}

}

使用netbeans執行該類中的main方法,結果如下:

/home/letian/NetBeansProjects/HelloJava/user.properties

Exception in thread "main" java.nio.file.NoSuchFileException: user.properties

......

打包成jar并執行:

$ java -jar HelloJava.jar me.letian.HelloJava

/home/letian/NetBeansProjects/HelloJava/dist/user.properties

Exception in thread "main" java.nio.file.NoSuchFileException: user.properties

......

可以看到,上面的兩種運行方式所輸出的properties文件的絕對路徑都是不存在的。

解決方法很簡單: 將

String propsPath = "user.properties";

替換為

String propsPath = "src/me/letian/user.properties";

無論是使用絕對路徑還是相對路徑,對于jar都是不合適的,最好的方法是以資源文件的形式獲取 user.properties 。

以資源的形式(方法1)

package me.letian;

import java.io.IOException;

import java.io.InputStream;

import java.nio.file.Paths;

import java.util.Properties;

public class HelloJava {

public static void main(String[] args) throws IOException {

Properties props = new Properties();

String propsPath = "me/letian/user.properties";

try (InputStream in = HelloJava.class.getClassLoader().getResourceAsStream("me/letian/user.properties");) {

props.load(in);

System.out.println(props.getProperty("name"));

}

}

}

以資源的形式(方法2)

package me.letian;

import java.io.IOException;

import java.util.ResourceBundle;

public class HelloJava {

public static void main(String[] args) throws IOException {

ResourceBundle rb1 = ResourceBundle.getBundle("me.letian.user");

System.out.println(rb1.getString("name"));

ResourceBundle rb2 = ResourceBundle.getBundle("me/letian/user");

System.out.println(rb2.getString("password"));

}

}

執行結果:

root

hi

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/129745.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息