当前位置: 首页 > news >正文

java properties api_【001】java中配置文件properties的操作

properties文件在java的使用是比较常见的用于配置key-value的配置文件,java中也有专门对该种类型的文件进行处理的类Properties

一、Properties类API

1、Properties类描述

Properties继承了HashTable,明确的表示了它是一个key-value的集合,类中描述了可以使用get、put方法但是要保证key-value都是字符串否则会在写入文件时出错,也可以用其本身的getProperty、setProperty来操作这是安全的。

842c83c9203bfe53859865a252d72a2b.png

2、Properties方法说明

方法的描述相对比较容易理解,主要包含load输入流(将properties的key-value解析出来)、键值对集合操作、将集合内容写入到输出流(store、list)

bd88f387a661355cd8684372eb802064.png

二、Properties类初步使用

1、要将properties的文件内容读取到Properties集合里面首先要load,这里提供了三种方法(字符流、字节流、以及xml的load),那么过程是这样的:

File》文件流》load

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classTestProperties {public static void main(String[] args) throwsIOException {

File f= new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());//字节流处理

InputStream is = newFileInputStream(f);

Properties p= newProperties();

p.load(is);

System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));

is.close();//字符流处理

FileReader fr = newFileReader(f);

Properties p2= newProperties();

p2.load(fr);

System.out.println(p2.getProperty("/nutrition/food/foodClassificationController"));

fr.close();

}

}

View Code

request-mapping.properties文件内容如下

/nutrition/food/foodClassificationController = cn.nutrition.food.controller.FoodClassificationController

结果两种方式都打印了cn.nutrition.food.controller.FoodClassificationController的值

2、properties文件内容的写也有几种方式list对应的两种文件流(没有限定load的流类型)、store对应的两种文件流(必须跟load的流一样才可以操作成功),这是可以组合使用的

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());//字节流处理

InputStream is = newFileInputStream(f);

Properties p= newProperties();

p.load(is);

System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));

is.close();

p.setProperty("key", "value");

OutputStream os= newFileOutputStream(f);

p.store(os,"2018.5.10");

View Code

文件操作结果内容:

#2018.5.10#Thu May10 00:27:29 CST 2018

/nutrition/food/foodClassificationController=cn.nutrition.food.controller.FoodClassificationController

key=value

这里除了键值对,还有两行“#”标记的注释内容

再看另外的写入方式:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());//字节流处理

InputStream is = newFileInputStream(f);

Properties p= newProperties();

p.load(is);

System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));

is.close();

p.setProperty("key", "value");

PrintWriter os= newPrintWriter(f);

p.store(os,"2018.5.10");

View Code

文件操作结果跟上面的一样,貌似跟api里面的描述有差异,具体的原因暂且先放一放

第三种方式:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());//字节流处理

InputStream is = newFileInputStream(f);

Properties p= newProperties();

p.load(is);

System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));

is.close();

p.setProperty("key", "value");

PrintWriter os= newPrintWriter(f);

p.list(os);

os.flush();os.close();

View Code

注意,这里os需要调用flush。

进行多次以上的操作结果:

-- listing properties --

--=listing properties --

/nutrition/food/foodClassificationController=cn.nutrition.food.controller.FoodClas...

key=value

这证明,这种方式只合适用作日志打印list(System.out),不可以使用此种方式写文件,否则容易造成数据丢失。

三、properties文件操作的工具封装,这里封装只针对于properties文件的读操作

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecn.nutrition.common.util;importjava.io.Closeable;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Properties;importjava.util.Set;public classPorpertiesUitl {public staticProperties getProperties(String filePath)

{

Properties properties= newProperties();

File f= new File(PorpertiesUitl.class.getResource("request-mapping.properties").getPath());

InputStream is= null;try{

is= newFileInputStream(f);

properties.load(is);if(null !=is) {

is.close();

}

}catch(IOException e) {

e.printStackTrace();

}finally{

closeIO(is);

}returnproperties;

}public static MapgetMapping(String filePath)

{

Map map = new HashMap();

Properties properties=getProperties(filePath);

Set> entrys =properties.entrySet();for (Entryentry : entrys) {

map.put(entry.getKey().toString(), entry.getValue().toString());

}returnmap;

}private static voidcloseIO(Closeable io)

{if(null !=io) {try{

io.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

View Code

这里涉及到source目录下的文件加载路径问题,参考

xml文件的加载

相关文章:

  • java 获取代码line_linedemo.java
  • java spring 加载顺序_java编程之如何控制springboot中bean的加载顺序
  • java注册用户信息_界面设计之注册用户信息
  • java 解析der文件_[Java]读取文件方法大全
  • java中成员变量的分类_Java基础—变量分类、类与对象
  • java语言字符串代码_JAVA语言实现字符串排序的代码教程
  • java findcontour_cvFindContours获取轮廓数目和轮廓图像
  • java if 没有_使用if语句时,为什么我的代码没有给出正确的答案? - java
  • php时间格式转换成时间戳,php时间格式转换成时间戳的方法
  • echarts php 数据处理,PHP 使用Echarts生成数据统计报表详解
  • conv php,php metaphone()函数及php localeconv() 函数实例解析
  • php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  • php计算器源码,php 简单计算器
  • 学生考勤管理系统php,php158 学生考勤管理系统
  • linux php-mbstring下载,linux下php加载mbstring的方法 | 快享
  • 【前端学习】-粗谈选择器
  • Android组件 - 收藏集 - 掘金
  • javascript 总结(常用工具类的封装)
  • Java面向对象及其三大特征
  • java小心机(3)| 浅析finalize()
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Linux各目录及每个目录的详细介绍
  • mac修复ab及siege安装
  • Python连接Oracle
  • sessionStorage和localStorage
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vim Clutch | 面向脚踏板编程……
  • Vue2 SSR 的优化之旅
  • 分布式任务队列Celery
  • 利用DataURL技术在网页上显示图片
  • 面试遇到的一些题
  • 前端js -- this指向总结。
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 优秀架构师必须掌握的架构思维
  • 最近的计划
  • 【云吞铺子】性能抖动剖析(二)
  • Nginx实现动静分离
  • 阿里云移动端播放器高级功能介绍
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​Spring Boot 分片上传文件
  • ​业务双活的数据切换思路设计(下)
  • (3)STL算法之搜索
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (六)c52学习之旅-独立按键
  • (转)程序员技术练级攻略
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .gitignore文件设置了忽略但不生效
  • .NET C# 配置 Options
  • .net core Redis 使用有序集合实现延迟队列
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net开发时的诡异问题,button的onclick事件无效
  • //TODO 注释的作用