Java关于Properties用法的总结(一)
?
最近項目中有一個這樣的需求,要做一個定時任務(wù)功能,定時備份數(shù)據(jù)庫的操表,將表數(shù)據(jù)寫入txt文件。因為文件的讀寫路徑可能需要隨時改動,所以寫死或者寫成靜態(tài)變量都不方便,就考慮使用配置文件,這里總結(jié)些配置文件用法。
一、Java Properties類
1、Java中有個比較重要的的類Properties(java.util.Properties),是代表一個持久的一套詳細屬性,屬性可以被保存到一個流或從流中加載的類。以下是關(guān)于屬性的要點:
-
屬性列表中每個鍵及其對應(yīng)值是一個字符串。
-
一個屬性列表可包含另一個屬性列表作為它的“默認”,第二個屬性可在列表中搜索,如果沒有在原有的屬性列表中找到的屬性鍵。
-
這個類是線程安全的;多個線程可以共享一個Properties對象,而不需要外部同步
-
2、該類的主要方法如下:
3、主要用于讀取Java配置文件,存放一些經(jīng)常用到的數(shù)據(jù),方便程序員修改。該配置文件是個文本文件,后綴名為(.properties),
文件的內(nèi)容格式為“key=value”,文本注釋可以使用”#“來注釋。如下圖:
?
4、在配置文件中直接寫中文讀取的時候會有亂碼,所以要轉(zhuǎn)碼成ASCII。eclipse最新版本中會自動轉(zhuǎn)碼,如果需要手動轉(zhuǎn)碼,可以借助一些在線轉(zhuǎn)碼工具,這里推薦一個:
http://tool.oschina.net/encode?type=3
二、Java Properties實例
1、從目標路徑test.properites中獲取輸入流對象
2、使用Properties類的load()方法從字節(jié)輸入流中獲取數(shù)據(jù)
3、直接打印Properties對象
4、使用Properties類的getProperty(String key)方法,根據(jù)參數(shù)key獲取value
5、具體代碼如下:
package example;import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Properties;public class Test {public static void main(String[] args) {try {Properties prop = new Properties();InputStream in = Test.class.getClassLoader().getResourceAsStream("test.properties");prop.load(in);//直接輸出prop對象System.out.println("直接輸出prop對象:"+prop);//獲取name的值String name=prop.getProperty("name");//獲取address的值String address=prop.getProperty("address");//獲取job的值String job=prop.getProperty("job");System.out.println("name="+name+",address="+address+",job="+job);} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}} }6、執(zhí)行結(jié)果如下:
從上圖可以看出,job的值是亂碼,說明在配置文件中不可以直接使用中文。還有#號后面的注釋沒有打印出來。
三、關(guān)于路徑問題的補充
1、上述獲得Properties配置文件中英文是通過Test.class.getClassLoader().getResourceAsStream()方法直接獲得字節(jié)輸入流,所以不用考慮路徑中是否包含中文的問題,如果是通過Test.class.getClassLoader().getResource()方法,因為該方法返回值是URL,如果項目的目錄中有中文命名,則獲得的URL會出現(xiàn)亂碼,所以使用????????
String path=URLDecoder.decode(url.getFile(), "utf-8");
2、具體代碼如下:
package example;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Properties;public class Test {public static void main(String[] args) {try {Properties prop = new Properties();Properties prop2 = new Properties(); // String path =Test.class.getClassLoader().getResource("example/china/test2.properties").getPath();//獲得URL路徑URL url=Test.class.getClassLoader().getResource("example/china/test2.properties");//打印路徑System.out.println("url.getFile()="+url.getFile());//將路徑中的中文轉(zhuǎn)碼String path=URLDecoder.decode(url.getFile(), "utf-8");System.out.println("path="+path);//通過路徑獲得字節(jié)輸入流InputStream input=new FileInputStream(path);//直接獲得字節(jié)輸入流InputStream in = Test.class.getClassLoader().getResourceAsStream("example/china/test2.properties");prop.load(in);prop2.load(input);System.out.println("prop="+prop);System.out.println("prop2="+prop2);} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}} }3、輸出結(jié)果:
轉(zhuǎn)載于:https://www.cnblogs.com/gongchenglion/p/properties.html
總結(jié)
以上是生活随笔為你收集整理的Java关于Properties用法的总结(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python字符串笔录
- 下一篇: 获取日期是月份中的第几周(以周一为开始时