欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA之讀取properties時路徑的注意問題

 更新時間:2023年08月14日 14:17:02   作者:北漁。  
這篇文章主要介紹了JAVA之讀取properties時路徑的注意問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

JAVA讀取properties時路徑的注意

先來看看建立的測試工程目錄

屬性文件我們放在包test下,當然了,一般在實際開發(fā)過程中不建議這樣做,建立把屬性文件放在src目錄下,現(xiàn)在放在包下主要是便于了解路徑的問題。

下面來看一段讀取屬性文件的代碼,屬性文件配置了一個類Hello的K-V鍵值,我們要從中讀取并加載到內(nèi)存中來。

ReadProperties.properties

v=com.luhy.test.Hello

Hello類:

package com.luhy.test;
public class Hello {
	public void run(){
		System.out.println("Hello");
	}
}

ReadProperties.java

package com.luhy.test;
import java.util.Properties;
public class ReadProperties {
	public static void main(String[] args) throws Exception{
		String filename = "com/luhy/test/ReadProperties.properties";
		Properties props = new Properties();
		props.load(ReadProperties.class.getClassLoader().getResourceAsStream(filename));
		String h = props.getProperty("v");
		Object o = Class.forName(h).newInstance();
		Hello hello = (Hello)o;
		hello.run();
	}
}

執(zhí)行完打印輸出:

Hello

下面再來看一下編譯后的bin目錄

可見編譯后屬性文件被自動放到相應的包內(nèi),當然了,這里的bin相當于源碼中的src,實際開發(fā)中一般放在此src目錄下,這樣在發(fā)布項目時就不用折騰了。

說明:

props.load(ReadProperties.class.getClassLoader().getResourceAsStream(filename));

意思是獲得從Properties類獲得類加載器(類加載器主要有四種,分別加載不同類型的類,加載只是把class文件放進內(nèi)存,并沒有產(chǎn)生對象),并把指定文件轉(zhuǎn)化為流。

這一步,有很多新手,直接往load()里填文件名或具體文件路徑名,程序運行時會報錯找不到指定路徑。

所以,一定要注意這點。

JAVA讀取properties文件,中文出現(xiàn)亂碼

問題的提出

初用properties,讀取java properties文件的時候如果value是中文,會出現(xiàn)讀取亂碼的問題 

問題分析

開始以為是文件保存編碼問題,把eclipse中所有的文件編碼都修改成utf8,問題依然存在;

把內(nèi)容復制到notepad++進行utf8編碼轉(zhuǎn)換,問題依舊;

上網(wǎng)搜索有人提議重寫properties類或者用jdk自帶的編碼轉(zhuǎn)換工具,嫌麻煩而且憑感覺jdk開發(fā)者不可能不考慮東亞幾國的字符編碼問題;

因為properties文件操作的代碼是參考百度文庫里的一邊文章的,分析其代碼后,發(fā)現(xiàn)其用的是字節(jié)流來讀取文件,

具體代碼如下: 

Properties properties = new Properties(); ?
InputStream inputStream = this.getClass().getResourceAsStream("/menu.properties"); ?
properties.load(inputStream ); ?
System.out.println(properties.getProperty("a")); ?

因為字節(jié)流是無法讀取中文的,所以采取reader把inputStream轉(zhuǎn)換成reader用字符流來讀取中文。

代碼如下: 

Properties properties = new Properties(); ?
InputStream inputStream = this.getClass().getResourceAsStream("/menu.properties"); ?
BufferedReader bf = new BufferedReader(new ? ?InputStreamReader(inputStream)); ?
properties.load(bf); ?
System.out.println(properties.getProperty("a")); ?

代碼示例

1、工具類

/**
?* 讀取配置文件Properties
?*?
?* @author xl
?*
?*/
public class PropertiesUtil {
?? ?private PropertiesUtil() {
?? ?}
?? ?private static class SingletonHolder {
?? ??? ?private final static PropertiesUtil instance = new PropertiesUtil();
?? ?}
?? ?public static PropertiesUtil getInstance() {
?? ??? ?return SingletonHolder.instance;
?? ?}
?? ?/**
?? ? * 讀取key字段,配置文件在classes根路徑下xx.properties,在子路徑下xx/xx.properties
?? ? *?
?? ? * @param file
?? ? * @param key
?? ? * @return
?? ? */
?? ?public String read(String file, String key) {
?? ??? ?InputStream in = getClass().getClassLoader().getResourceAsStream(file);
?? ??? ?BufferedReader bf = new BufferedReader(new InputStreamReader(in));?
?? ??? ?Properties prop = new Properties();
?? ??? ?String value = "";
?? ??? ?try {
?? ??? ??? ?prop.load(bf);
?? ??? ??? ?value = prop.getProperty(key);
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?return value;
?? ?}
}

2、使用工具類

/**
?? ? * 獲取properties文件中存放的數(shù)據(jù)
?? ? *?
?? ? * @param req
?? ? * @param resp
?? ? * @return
?? ? * @throws Exception
?? ? */
?? ?@RequestMapping(value = "/getPropertiesData")
?? ?@ResponseBody
?? ?public Map<String, Object> getPropertiesData(HttpServletRequest req, HttpServletResponse resp) throws Exception {
?? ??? ?Map<String, Object> returnMap = new HashMap<String, Object>();
?? ??? ?// 獲取請求參數(shù)
?? ??? ?String key = (String) req.getParameter("key");
?? ??? ?String file = (String) req.getParameter("file");
?? ??? ?// 從配置文件讀取key對應的value
?? ??? ?String value = PropertiesUtil.getInstance().read(file, key);
?? ??? ?returnMap.put("data", value);
?? ??? ?// 解析返回結(jié)果
?? ??? ?return returnMap;
?? ?}

完?。?!

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring中使用Hystrix實現(xiàn)熔斷詳解

    Spring中使用Hystrix實現(xiàn)熔斷詳解

    這篇文章主要介紹了Java中使用Hystrix實現(xiàn)熔斷詳解,對于第一個問題,查看hystrix源碼可以看到,如果有緩存配置是優(yōu)先使用的緩存的,因此如果配置更新,必須要更新緩存,不能使用Hystrix.reset()方法來更新緩存,需要的朋友可以參考下
    2023-12-12
  • Java常用字符串方法小結(jié)

    Java常用字符串方法小結(jié)

    字符串變量是Java與C語言的一大不同之處。Java之中的 String 類和 Stringbuffer 類提供了大量的對字符串操作的方法。String 類適合處理較小的字符串,而Stringbuffer類適合處理大量字符串
    2017-04-04
  • SpringBoot配置的加載流程詳細分析

    SpringBoot配置的加載流程詳細分析

    了解內(nèi)部原理是為了幫助我們做擴展,同時也是驗證了一個人的學習能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的,這篇文章主要介紹了SpringBoot配置的加載流程
    2023-01-01
  • java生成圖片驗證碼示例代碼

    java生成圖片驗證碼示例代碼

    這篇文章主要為大家詳細介紹了java生成圖片驗證碼示例代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Spring Boot中是如何處理日期時間格式的

    Spring Boot中是如何處理日期時間格式的

    這篇文章主要介紹了Spring Boot中是如何處理日期時間格式的,幫助大家更好的理解和學習spring boot框架,感興趣的朋友可以了解下
    2020-11-11
  • Java中ArrayList的常見用法示例小結(jié)

    Java中ArrayList的常見用法示例小結(jié)

    本文介紹了Java的ArrayList,它是一個動態(tài)數(shù)組,可以自動調(diào)整大小,支持添加、刪除、獲取元素等操作,同時,還討論了如何存儲基本數(shù)據(jù)類型以及在多線程環(huán)境下的使用注意事項,感興趣的朋友一起看看吧
    2025-02-02
  • 深入講解Java中的多態(tài)和抽象類

    深入講解Java中的多態(tài)和抽象類

    這篇文章主要介紹了深入講解Java中的多態(tài)和抽象類,有時候,設計一個數(shù)組或方法的參數(shù),返回值類型時,無法確定具體的類型,只能確定是某個系列的類型,這時就引入了多態(tài),需要的朋友可以參考下
    2023-08-08
  • IDEA實現(xiàn) springmvc的簡單注冊登錄功能的示例代碼

    IDEA實現(xiàn) springmvc的簡單注冊登錄功能的示例代碼

    這篇文章主要介紹了IDEA實現(xiàn) springmvc的簡單注冊登錄功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 詳解Java中的流程控制

    詳解Java中的流程控制

    今天帶大家復習Java基礎知識,文中對Java流程控制作了非常詳細的介紹及代碼示例,對正在學習Java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Spring Security認證機制源碼層探究

    Spring Security認證機制源碼層探究

    SpringSecurity是基于Filter實現(xiàn)認證和授權,底層通過FilterChainProxy代理去調(diào)用各種Filter(Filter鏈),F(xiàn)ilter通過調(diào)用AuthenticationManager完成認證 ,通過調(diào)用AccessDecisionManager完成授權
    2023-03-03

最新評論