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

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

一、Properties类API

1、Properties类描述

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

2、Properties方法说明

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

二、Properties类初步使用

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

File》文件流》load

public class TestProperties {

    public static void main(String[] args) throws IOException {
        File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());
        //字节流处理
        InputStream is = new FileInputStream(f);
        Properties p = new Properties();
        p.load(is);
        System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));
        is.close();
        //字符流处理
        FileReader fr = new FileReader(f);
        Properties p2 = new Properties();
        p2.load(fr);
        System.out.println(p2.getProperty("/nutrition/food/foodClassificationController"));
        fr.close();
    }
}

request-mapping.properties文件内容如下

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

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

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

        File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());
        //字节流处理
        InputStream is = new FileInputStream(f);
        Properties p = new Properties();
        p.load(is);
        System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));
        is.close();
        p.setProperty("key", "value");
        OutputStream os = new FileOutputStream(f);
        p.store(os,"2018.5.10");

文件操作结果内容:

#2018.5.10
#Thu May 10 00:27:29 CST 2018
/nutrition/food/foodClassificationController=cn.nutrition.food.controller.FoodClassificationController
key=value

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

再看另外的写入方式:

        File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());
        //字节流处理
        InputStream is = new FileInputStream(f);
        Properties p = new Properties();
        p.load(is);
        System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));
        is.close();
        p.setProperty("key", "value");
        PrintWriter os = new PrintWriter(f);
        p.store(os,"2018.5.10");

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

第三种方式:

        File f = new File(new TestProperties().getClass().getResource("request-mapping.properties").getPath());
        //字节流处理
        InputStream is = new FileInputStream(f);
        Properties p = new Properties();
        p.load(is);
        System.out.println(p.getProperty("/nutrition/food/foodClassificationController"));
        is.close();
        p.setProperty("key", "value");
        PrintWriter os = new PrintWriter(f);
        p.list(os);
        os.flush();os.close();

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

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

-- listing properties --
--=listing properties --
/nutrition/food/foodClassificationController=cn.nutrition.food.controller.FoodClas...
key=value

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

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

package cn.nutrition.common.util;

import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class PorpertiesUitl {

    public static Properties getProperties(String filePath)
    {
        Properties properties = new Properties();
        File f = new File(PorpertiesUitl.class.getResource("request-mapping.properties").getPath());
        InputStream is = null;
        try {
            is = new FileInputStream(f);
            properties.load(is);
            if(null != is) {
                is.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            closeIO(is);
        }
        return properties;
    }

    public static Map<String, String> getMapping(String filePath)
    {
        Map<String, String> map = new HashMap<String, String>();
        Properties properties = getProperties(filePath);
        Set<Entry<Object, Object>> entrys = properties.entrySet();
        for (Entry<Object, Object> entry : entrys) {
            map.put(entry.getKey().toString(), entry.getValue().toString());
        }
        return map;
    }

    private static void closeIO(Closeable io)
    {
        if(null != io) {
            try {
                io.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

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

xml文件的加载

原文地址:https://www.cnblogs.com/liushi805347332/p/9011958.html

时间: 2024-08-29 19:57:31

【001】java中配置文件properties的操作的相关文章

java中读取properties配置文件用例

在近期需要部署一个项目,所以用到了配置文件. 对于读取配置文件的过程,考虑到效率问题,决定在程序启动时将配置文件内的键值读写入变量. 这样一来,之后程序每次对键值的访问就不用在读配置文件了,而是直接取变量值. 如下是简化之后的用例,展示了一种对properties文件的读取使用方法: 1.创建配置文件data.properties,文件内容如下: user=BUPT pwd=100876 2.创建存储配置文件键值用到的文件Conf.java 1 public class Conf { 2 3 p

java中使用Properties加载XML文件设置java窗体应用程序的窗体属性

一.描述 开发一个MyFrame窗体应用程序,该窗体继承JFrame类,窗体中的标题.按钮上的文字等信息都可以写在一个xml配置文件中,即使以后想更改所有的属性,只需要更改xml配置文件中的相应属性即可. 本案例使用java中的Properties类来加载一个xml配置文件,并读取文件中的所有属性(key-value),并将取得的所有键值对应用于JFrame窗体属性中. 二.源代码 package tong.day4_27.systemUse; import java.awt.FlowLayou

线程基础:线程(3)——JAVA中的基本线程操作(中)

(接上文<线程基础:线程(2)--JAVA中的基本线程操作(上)>) 1-4.注意synchronized关键字的使用 在前面的文章中我们主要讲解的是线程中"对象锁"的工作原理和操作方式.在讲解synchronized关键字的时候,我们还提到了synchronized关键字可以标注的位置.大家经常看到相当部分的网贴,在它们的代码示例中将synchronized关键字加载到代码的方法体上,然后告诉读者:这个操作是线程安全的.代码可能如下: /** * 这个类的class对象进

java中 mongodb的各种操作

一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is  精确匹配,模糊匹配 使用 regex...) public PageUrl getByUrl(String url) { return findOne(new Query(Criteria.where("url").is(url)),PageUrl.class); } 2. 查询多条数据:linkUrl.id 属于分级查询 public List<PageUrl> getPageU

Java 读取配置文件 Properties

String filePath="src/cn/ac/iscas/pebble/ufe/conf/id.properties"; InputStream in = new BufferedInputStream(new FileInputStream(filePath)); int i = 0; Properties p = new Properties(); p.load(in); p.getProperty(key); 还有一个方式如下: public class ConfigUt

java中的Properties类的操作

java中有个比较重要的类:Properties类,该类主要用于读取java的配置文件.每种语言都自己所支持的配置文件.java中的配置常为*.perperties文件,文件格式为文本格式,内容格式为“健=值”对格式,文本注释信息可用#注释. Properties继承Hashtable 它提供了几个主要的方法: 1. getProperty ( String key),用指定的键在此属性列表中搜索属性.也就是通过参数 key ,得到 key 所对应的 value. 2. load ( Input

Java中读取.properties配置文件的通用类

由于Java中读取配置文件的代码比较固定,所以可以将读取配置文件的那部分功能单独作为一个类,以后可以复用.为了能够达到复用的目的,不能由配置文件中每一个属性生成一个函数去读取,我们需要一种通用的方法读取属性,即由用户给出属性名字(作为方法参数)来获取对应属性的Value值.下面是示例代码: 1 import java.io.*; 2 import java.util.*; 3 4 import org.apache.commons.logging.Log; 5 import org.apache

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

Java中的Properties类详解

1.Properties类是什么? Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置.就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的. 2.常用的方法 getProperty(String key)   在此属性列表中搜索具有指定键的属性.如果在此属性列表中找不到该键,