JAVA增刪改查Properties配置文件工具類(lèi)

項(xiàng)目中經(jīng)常會(huì)遇到使用Properties文件朽色,作為配置文件酱酬。這時(shí)就離不開(kāi)對(duì)它進(jìn)行增刪改查操作.

  • 整體思路:
    • 讀取思路
      1、實(shí)例化Properties對(duì)象仆救。
      2抒和、創(chuàng)建一個(gè)輸入流inputstream對(duì)象。
      3彤蔽、使用load方法讀取輸入流摧莽。
      4、返回Properties對(duì)象顿痪。
      5镊辕、關(guān)閉流
    • 新增思路
      1、實(shí)例化Properties對(duì)象蚁袭。
      2征懈、創(chuàng)建一個(gè)輸出流對(duì)象(此處主要,是追加模式)揩悄。
      3卖哎、使用setProperty方法將屬性寫(xiě)入到Properties對(duì)象。
      4删性、使用store方法讀取輸出流寫(xiě)入到文件棉饶。
      5、關(guān)閉流镇匀。
    • 修改思路
      1照藻、實(shí)例化Properties對(duì)象。
      2汗侵、創(chuàng)建一個(gè)輸入流對(duì)象幸缕。
      3、使用load方法讀取輸入流晰韵。
      4发乔、創(chuàng)建一個(gè)輸出流對(duì)象。
      5雪猪、遍歷傳入的要修改或新增的記錄集合map栏尚,并使用setProperty(key, map.get(key))方法設(shè)置或者更新value值。
      6只恨、使用store方法將輸出流寫(xiě)入到文件(這里要注意译仗,寫(xiě)入方式是覆蓋)
      7抬虽、關(guān)閉流
    • 刪除思路
      與修改思路基本相同,第五步使用remove方法纵菌,刪除key節(jié)點(diǎn)阐污。

具體代碼如下:

/** 
 * @ClassName: GetPropertiesConfigUtils 
 * Description: 讀取,新增咱圆,修改笛辟,刪除properties配置文件內(nèi)容的工具類(lèi)  </br>
 * @author: manyu </br>
 * address: www.mpmanyu.com
 * date: 2021年3月31日 上午9:08:16  
 */
public class GetPropertiesConfigUtils {
    /**
     * 
    * Title: loadPropertiesFromClassPath </br>
    * Description: 靜態(tài)方法,用于返回 properties對(duì)象 序苏,讀取properties文件 <br>
    * 例如:
    * Properties p = GetPropertiesConfigUtils.loadPropertiesFromClassPath("db.properties");
    * 
    * @param config 配置文件路徑手幢,使用類(lèi)加載器獲得的inputsteam流,所以配置文件必須放到src下忱详,具體路徑問(wèn)題具體分析围来,也可將類(lèi)反射更改為文件輸入流方式
    * @return Properties對(duì)象
    * @author manyu </br>
    * update 2021年3月31日上午9:14:25
     */
    public static Properties loadPropertiesFromClassPath(String config) {
        Properties p = new Properties();
        InputStream in= null;
        try {
            //使用類(lèi)加載器讀取 properties文件
            in = GetPropertiesConfigUtils.class.getClassLoader().getResourceAsStream(config);
            p.load(in);
                        return p;
        } catch (IOException e) {
            
            e.printStackTrace();
        } finally {
            if(in !=null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
        
        return p;
        
        
    }
    /**
     * 
    * Title: writeProperties 
    * Description: 向properties文件中添加key-value屬性 </br>
    * 1、實(shí)例化Properties對(duì)象  </br>
    * 2踱阿、創(chuàng)建一個(gè)輸出流對(duì)象 </br>
    * 3管钳、使用setProperty方法將屬性寫(xiě)入到Properties對(duì)象 </br>
    * 4、調(diào)用Properties的存儲(chǔ)方法 </br>
    * 5软舌、關(guān)閉資源 </br>
    * @param path Properties文件路徑
    * @param key  添加key
    * @param value 添加value
    * @author manyu </br>
    * update 2021年3月31日下午4:32:07
     */
    public static void writeProperties(String path,String key,String value) {

        //1
        Properties p = new Properties();
        //2
        FileOutputStream out = null;
        try {
            //2
            out = new FileOutputStream(path,true);// true必須添加才漆,追加數(shù)據(jù),不要覆蓋數(shù)據(jù)
            OutputStreamWriter outWriter = new OutputStreamWriter(out, "UTF-8");//引入writer佛点,確保寫(xiě)入的數(shù)據(jù)中文編碼正確
            //3
            p.setProperty(key, value);
            System.out.println("key="+key+"  value="+value);
            //4
            p.store(outWriter,"");
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(out!=null) {
                try {
                    out.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }

    /**
     * 
    * Title: uploadProperties  </br>
    * Description: 更新或新增屬性   </br>
    * 1醇滥、實(shí)例化Properties對(duì)象  </br>
    * 2、創(chuàng)建一個(gè)輸出流對(duì)象用來(lái)讀取配置文件超营,一個(gè)輸出流對(duì)象鸳玩,用來(lái)輸出對(duì)象  </br>
    * 3、使用set方法將屬性下入到Properties對(duì)象  </br>
    * 4演闭、調(diào)用Properties的存儲(chǔ)方法store  </br>
    * 5不跟、關(guān)閉資源  </br>
    * @param path
    * @param map 
    * @author manyu
    * update 2021年4月1日上午9:21:36 </br>
     */
    public static void upldatePropertiesbyMap(String path,Map<String, String> map) {
        //1
        Properties p = new Properties();
        //2
        FileInputStream in = null;
        FileOutputStream out = null;
        
        try {
            in = new FileInputStream(path);
            
            //字符流,以u(píng)tf-8編碼讀取
            InputStreamReader reader = new InputStreamReader(in,"utf-8");
            p.load(in);
            System.out.println(p.stringPropertyNames());
            //3
            for(String key:map.keySet()) {
                p.setProperty(key, map.get(key));
            }
            out = new FileOutputStream(path);//注意要放到properties的load方法之后米碰,否則會(huì)清空文件
            OutputStreamWriter writer = new OutputStreamWriter(out,"utf-8");
            //4
            p.store(writer, "");//comments 是記錄到注釋中的內(nèi)容,可以放空
            //5
            reader.close();
            writer.close();
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(in!=null) {
                    in.close();
                }
                if(out!=null) {
                    out.close();
                }
                
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
    }
    /**
     * 
    * Title: removePropertiesbyMap  </br>
    * Description: 刪除配置文件中的節(jié)點(diǎn)窝革,實(shí)現(xiàn)與update遠(yuǎn)離相同 </br>
    * @param path   prpperties文件路徑
    * @param keys   set類(lèi)型,可批量刪除key
    * @author manyu </br>
    * update 2021年4月1日上午10:35:24
     */
    public static void removePropertiesbyMap(String path,Set<String> keys) {
        //1
        Properties p = new Properties();
        //2
        FileInputStream in = null;
        FileOutputStream out = null;
        
        try {
            in = new FileInputStream(path);
            
            //字符流吕座,以u(píng)tf-8編碼讀取
            InputStreamReader reader = new InputStreamReader(in,"utf-8");
            p.load(in);
            //System.out.println(p.stringPropertyNames());//顯示所有的key
            //3
            for(String key:keys) {
                p.remove(key);
            }
    
            out = new FileOutputStream(path);//注意要放到properties的load方法之后虐译,否則會(huì)清空文件
            OutputStreamWriter writer = new OutputStreamWriter(out,"utf-8");
            //4
            p.store(writer, "");//comments 是記錄到注釋中的內(nèi)容,可以放空
            //5
            reader.close();
            writer.close();
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(in!=null) {
                    in.close();
                }
                if(out!=null) {
                    out.close();
                }
                
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
    }
    
    //例如
    
/*  public static void main(String[] args) {
        Properties config = GetPropertiesConfigUtils.loadPropertiesFromClassPath("db.properties");
        String driver = config.getProperty("DRIVER");
        System.out.println(driver);
        
    }*/
}


測(cè)試代碼如下:

        //測(cè)試讀取properties中的key-value數(shù)據(jù)
        Properties p = GetPropertiesConfigUtils.loadPropertiesFromClassPath("db.properties");
        String driver = p.getProperty("DRIVER");
        String user = p.getProperty("URL");
        System.out.println("driver="+driver+"  "+"user="+user);
        
        //測(cè)試寫(xiě)入Properties中的key-value數(shù)據(jù)
        GetPropertiesConfigUtils.writeProperties("dbc.properties", "shen", "yisi");
        
        //測(cè)試更新Properties中的Key-value 數(shù)據(jù)
        Map<String, String> map = new HashMap<>();
        map.put("DRIVER", "driver123");
        map.put("URL", "WWW.BAIDU.COM");
        GetPropertiesConfigUtils.upldatePropertiesbyMap("dbc.properties", map);
        
        //測(cè)試刪除Properties中的key-value 數(shù)據(jù)
        Set<String> keys = new HashSet<>();
        keys.add("URL");
        GetPropertiesConfigUtils.removePropertiesbyMap("dbc.properties",keys );
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吴趴,隨后出現(xiàn)的幾起案子漆诽,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厢拭,死亡現(xiàn)場(chǎng)離奇詭異兰英,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蚪腐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)箭昵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)税朴,“玉大人回季,你說(shuō)我怎么就攤上這事≌郑” “怎么了泡一?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)觅廓。 經(jīng)常有香客問(wèn)我鼻忠,道長(zhǎng),這世上最難降的妖魔是什么杈绸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任帖蔓,我火速辦了婚禮,結(jié)果婚禮上瞳脓,老公的妹妹穿的比我還像新娘塑娇。我一直安慰自己,他們只是感情好劫侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布埋酬。 她就那樣靜靜地躺著,像睡著了一般烧栋。 火紅的嫁衣襯著肌膚如雪写妥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天审姓,我揣著相機(jī)與錄音珍特,去河邊找鬼。 笑死魔吐,一個(gè)胖子當(dāng)著我的面吹牛扎筒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播画畅,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼砸琅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了轴踱?” 一聲冷哼從身側(cè)響起症脂,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后诱篷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體壶唤,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年棕所,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闸盔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琳省,死狀恐怖迎吵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情针贬,我是刑警寧澤击费,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站桦他,受9級(jí)特大地震影響蔫巩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜快压,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一圆仔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔫劣,春花似錦坪郭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸵隧,卻和暖如春绸罗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豆瘫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工珊蟀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人外驱。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓育灸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親昵宇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磅崭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容