java.util.Properties类学习

本文详细介绍了Java中Properties类的使用方法,包括如何加载和保存配置文件、读取和设置属性值等核心功能。同时提供了多种示例代码,帮助读者更好地理解和掌握Properties类的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 putputAll 方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 storesave 方法,则该调用将失败。类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNameslist 方法,则该调用将失败。

 Properties的setProperties和getProperty方法:

 常用方法及示例:

 StringgetProperty(String key)
          用指定的键在此属性列表中搜索属性。
 StringgetProperty(String key, String defaultValue)
          用指定的键在属性列表中搜索属性。
 voidlist(PrintStream out)
          将属性列表输出到指定的输出流。
 voidlist(PrintWriter out)
          将属性列表输出到指定的输出流。
 voidload(InputStream inStream)
          从输入流中读取属性列表(键和元素对)。
 voidload(Reader reader)
          按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
ObjectsetProperty(String key, String value)
          调用 Hashtable 的方法 put
 voidstore(OutputStream out, String comments)
          以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
 voidstore(Writer writer, String comments)
          以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
/**
     * @Description:  Properties操作文件时,通常要求文件有固定的格式:key = value
     */
    public static void main(String[] args) {
        Properties prop=new Properties();
        //内存中设置
//        memoryProp(prop);
        //磁盘中加载配置文件
//        loadProp(prop);
        //磁盘中加载的原理
        myLoadProp(prop);
        //将配置信息保存进磁盘文件中
        saveProp(prop,"d:\\prop.txt");
    }
//内存中设置
    public static void memoryProp(Properties prop){
        //设置值
        prop.setProperty("zhangsan","man");
        prop.setProperty("lili","woman");
        System.out.println("prop"+prop);
        //获取值
        String sex=prop.getProperty("zhangsan");
        System.out.println("zhangsan's sex:"+sex);
        //类似hashMap里的keyset  获取所有键
        Set<String> set=prop.stringPropertyNames();
        for (String str: set ) {
            System.out.println(str+":"+prop.getProperty(str));
        }
    }

 

properties对象 .load(输入流);

//磁盘中加载配置文件
    public static void loadProp(Properties prop){
        try {
            //字节流方式加载
//            FileInputStream fis=new FileInputStream("d:\\propTest.txt");
//            prop.load(fis);
            //字符流方式加载
            FileReader fr=new FileReader("d:\\propTest.txt");
            prop.load(fr);

            prop.list(System.out);
            fr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

//磁盘中加载的自定义实现  大致原理
    public static void myLoadProp(Properties prop){
        try {
            //读取文本用字符输入流
            FileReader fr=new FileReader("d:\\propTest.txt");
            //使用字符流缓冲
            BufferedReader br=new BufferedReader(fr);
            String line=null;
            //每次读取一行
            while ((line=br.readLine())!=null){
                //拿到一行的配置,设置进prop中
                String[] entry=line.split("=");
                prop.setProperty(entry[0],entry[1]);
            }
            prop.list(System.out);
            fr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 配置信息持久化:properties对象.store(输出流);

public static void saveProp(Properties prop,String filePath){
        FileOutputStream fos=null;
        FileWriter fw=null;
        try {
            //字节流保存
//           fos=new FileOutputStream(filePath);
//            prop.store(fos,"xxx's properties");
            //字符流保存
            fw=new FileWriter(filePath);
            prop.store(fw,"xxx's properties");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(fos!=null)fos.close();
                if(fw!=null) fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

将它写入文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值