电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

java加載屬性配置properties文件的方法

瀏覽:52日期:2022-09-03 16:34:07

什么是properties文件

屬性配置文件,后綴名為 .properties 文件中嚴(yán)格按照key=value進(jìn)行數(shù)據(jù)參數(shù)的填寫 中文參數(shù)值需要轉(zhuǎn)為Unicode編碼 不區(qū)分基本數(shù)據(jù)類型 一個(gè)編輯好的aaa.properties文件如下圖所示

username=rootflag=truexm =u4f60u597dage=18

為什么要使用properties文件

設(shè)想這么一種場景,當(dāng)你項(xiàng)目發(fā)布上線后,比如連接mysql數(shù)據(jù)庫的端口號需要調(diào)整,難道需要重寫改代碼,打包,發(fā)布么?對于一些重要的參數(shù),需要人為經(jīng)常改變的參數(shù)使用一個(gè)properties文件來讀取,就不用修改代碼了,修改完參數(shù),重啟web服務(wù)器就能實(shí)現(xiàn)預(yù)期的需求,后面會介紹動態(tài)加載properties文件,甚至連重啟都不需要了。

使用java加載properties文件的兩種方式

使用類的加載器獲得輸入流加載文件

@Test /** * 使用類的加載器獲得文件輸入流 * @author CC * @date 2020年3月24日 */ public void demo1() throws IOException{ Properties prop =new Properties(); InputStream inputstream= TestProp.class.getClassLoader().getResourceAsStream('test/aaa.properties'); prop.load(inputstream); String username=prop.getProperty('username'); boolean flag=Boolean.valueOf(prop.getProperty('flag')); String xm=prop.getProperty('xm'); int age =Integer.valueOf(prop.getProperty('age')); System.out.println( username + ' ' +flag+' '+xm+' '+age); }

需要注意的點(diǎn):

Properties 類是java.util包下的類,同時(shí)是Map的實(shí)現(xiàn)類,可以直接使用,有機(jī)會會介紹! 獲取參數(shù)prop.getProperty(“key”),這種獲得參數(shù)的value是字符串的形式,需要按需轉(zhuǎn)換 中文不需要特殊處理,Unicode編碼會轉(zhuǎn)化成中文

使用junit的單元測試效果如下:

root true 你好 123

getResourceAsStream()介紹

jdk中對其描述為:返回用于讀取指定資源的輸入流。

public InputStream getResourceAsStream(String name)

這個(gè)指定的資源路徑時(shí)怎么確定的呢?如果是java工程則是相對于src的路徑比如:是位于src的根目錄下有一個(gè)aaa.properties文件,增正確的訪問方式如下:

getResourceAsStream('aaa.properties');

比如:是位于src的根目錄下有一個(gè)test文件夾,里面有一個(gè)aaa.properties文件,增正確的訪問方式如下:

getResourceAsStream('test/aaa.properties');

使用文件輸入流加載文件

@Test /** * 使用標(biāo)準(zhǔn)的文件輸入流讀取文件 * @author CC * @date 2020年3月24日 */ public void demo2() throws IOException{ Properties prop =new Properties(); InputStream inputstream= new FileInputStream('src/test/aaa.properties'); prop.load(inputstream); String username=prop.getProperty('username'); boolean flag=Boolean.valueOf(prop.getProperty('flag')); String xm=prop.getProperty('xm'); int age =Integer.valueOf(prop.getProperty('age')); System.out.println( username + ' ' +flag+' '+xm+' '+age); }

使用文件輸入流的缺點(diǎn)是什么?

文件的相對路徑不好確定

一:如果是一個(gè)java工程,可以這么訪問:

new FileInputStream('src/test/aaa.properties');

二:如果是一個(gè)web工程,我們知道在Tomcat的webapps下的工程是沒有src路徑,所有的src下文件會被編譯后放在WEB-INF的classes文件夾下面,顯然上面這種訪問方式會報(bào)FileNotFound的異常

實(shí)現(xiàn)動態(tài)加載properties文件,不用重啟的那種

場景:已經(jīng)發(fā)布的web項(xiàng)目,我想修改參數(shù)又不想重啟怎么辦呢?傳統(tǒng)的上面使用類加載器獲得輸入流的方式,有以下缺點(diǎn):修改了.properties后,即使重新執(zhí)行,讀入的仍為修改前的參數(shù)。此問題的原因在于ClassLoader.getResourceAsStream讀入后,會將.properties保存在緩存中,重新執(zhí)行時(shí)會從緩存中讀取,而不是再次讀取.properties文件

使用FileInputStream每次從磁盤中的絕對路徑獲取文件屬性,就能解決上述的缺點(diǎn),但是需要怎樣獲得文件的絕對路徑?

Properties prop =new Properties(); //InputStream inputstream= ImgCheckServlet.class.getClassLoader().getResourceAsStream('aaa.properties'); //獲取絕對路徑 String path = Thread.currentThread().getContextClassLoader().getResource('').getPath(); System.out.println(path); InputStream inputstream= new FileInputStream(path+'/aaa.properties'); prop.load(inputstream); String username=prop.getProperty('username'); boolean flag=Boolean.valueOf(prop.getProperty('flag')); String xm=prop.getProperty('xm'); int age =Integer.valueOf(prop.getProperty('age')); System.out.println( username + ' ' +flag+' '+xm+' '+age);

可以在一個(gè)servlet中看看web工程下的調(diào)用效果:比如我們改動age=123,在控制臺可以看到效果如下,實(shí)時(shí)生效

root true 你好 123

到此這篇關(guān)于java加載屬性配置properties文件的方法的文章就介紹到這了,更多相關(guān)java properties配置內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 真空包装机-诸城市坤泰食品机械有限公司 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 | 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 北京公寓出租网-北京酒店式公寓出租平台 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 广东泵阀展|阀门展-广东国际泵管阀展览会 | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 耐压仪-高压耐压仪|徐吉电气| 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 溶氧传感器-pH传感器|哈美顿(hamilton) | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 |