Properties类和properties文件的简单总结-程序员宅基地

技术标签: java  

一、properties文件

  • properties文件是以properties为后缀的文件,是一种属性文件,这种文件以"key=value"的格式存储内容
  • Java中通常使用Properties类来读取这个文件,可以得到对应的数据
  • properties文件的要求与特点
    • 格式:属性名=属性值
    • 每对属性占一行(即一个键值对占一行)
    • 注释:在该文件中,用#表示单行注释
    • 属性文件中所有空行被忽略
    • 扩展名:properties
    • 属性文件中不能直接写汉字,所有的汉字会转成Unicode编码

二、Properties类

1. Properties类的理解

  • 可以使用这个类的实例存储键值对,我把它理解成 Map 的一个延申
  • 一般情况下,可以把他当成一个可以存储键值对的map,但是这个map可以进行文件的读写操作

2. 常用方法Properties类

(1) 存储键值对

	setProperty(String key, String value)

(2) 通过key获取对应的value

	public Object get(Object key)
	public String getProperty(String key)
	public String getProperty(String key, String defaultValue)

(3) 读取文件

  • 按面向行的格式从传入的字符流中读取属性列表
  • 换句话说,就是把文件中的键值对存储到这个对象中
  • 注意:可以读取txt文件、properties文件,但是推荐用properties保存配置信息
	public synchronized void load(InputStream inStream)
   	public synchronized void load(Reader reader)

(4) 写入文件

  • 将属性列表的键值对输出到指定的输出流中
	public void list(PrintStream out)
	public void list(PrintWriter out)
 	
 	// 常用举例:
    p.list(System.out) // 打印到控制台,经常使用这个进行程序的调试

3. 简单的应用(单元测试)

(1) 键值对的简单读写

    @Test
    public void test() throws Exception  {
    
        
        Properties p = new Properties();
        
        // 1. 存储键值对
        p.setProperty("1", "AAA");
        p.setProperty("2", "BBB");
        
        // 2. 通过key获取values
        System.out.println(p.get("1"));
        System.out.println(p.get("2"));
        System.out.println("**********************");
        
        // 3. 通过key获取values
        System.out.println(p.getProperty("1"));
        System.out.println(p.getProperty("2"));
        System.out.println("**********************");
        
        // 4. 通过key获取values
        //      并且设置了默认值,如果key不存在,则显示values的默认值
        //      但是不会存储该数据
        System.out.println(p.getProperty("3", "CCC"));
        System.out.println(p.getProperty("4", "DDD"));
        System.out.println("**********************");
        
        // 5. 把"map"中的键值对输出到控制台
        p.list(System.out);
    }
    
    
    // -------------------------------------------------下面为输出内容
    
    /*
    AAA
    BBB
    **********************
    AAA
    BBB
    **********************
    CCC
    DDD
    **********************
    -- listing properties --
    1=AAA
    2=BBB
    */

(2) 对文件的读

  • 只可以读取properties文件
    // jdbcTest1.properties:为空,没有内容
    // jdbcTest2.properties:有内容
    @Test
    public void test() throws Exception {
    
        // 1. 提供Properties实例对象
        Properties p1 = new Properties();
        Properties p2 = new Properties();
        
        // 2. 提供properties文件的输入流【注意:此时的文件路径默认与src同级】
        FileInputStream fs1 = new FileInputStream("doc\\jdbcTest1.properties");
        FileInputStream fs2 = new FileInputStream("doc\\jdbcTest2.properties");
        
        // 3. 读取文件
        p1.load(fs1);
        p2.load(fs2);
        
        // 4. 将读取到的内容输出到控制台中
        p1.list(System.out);
        System.out.println();
        p2.list(System.out);
    }
    
    
    // -------------------------------------------------下面为输出内容
    
    /*
    -- listing properties --
    
    -- listing properties --
    name=Tom
    id=1
    age=18
    */

(3) 对文件的写

  • 可以对properties文件、txt文件进行写入
  • 但是,将数据写入txt文件仅仅是为了演示操作,不建议使用该方法将数据写入txt中
@Test
    public void test() throws Exception {
    
        
        // 1. 提供Properties实例对象
        Properties p = new Properties();
        
        // 2. 提供数据来写入文件
        p.setProperty("id", "1");
        p.setProperty("name", "Tom");
        p.setProperty("age", "18");
        
        // 3. 提供properties文件的输入流
        PrintStream ps1 = new PrintStream("doc\\aaa.txt");
        PrintStream ps2 = new PrintStream("doc\\jdbcTest.properties");
        
        // 3. 将内容输出到对应的输出流中
        p.list(ps1);
        p.list(ps2);
    }

4. 读取properties文件的模板

	public static void test() {
    
        try {
    
            // 1. 提供Properties实例对象
            Properties p = new Properties();

            // 2. 提供properties文件的输入流
            FileInputStream fs = new FileInputStream("doc\\jdbcTest2.properties");

            // 3. 读取文件
            p.load(fs);

            // 4. 获取对应的值
            String id = p.getProperty("id");
            String name = p.getProperty("name");
            String age = p.getProperty("age");

            // 5. 处理结果
            System.out.println("id = " + id);
            System.out.println("name = " + name);
            System.out.println("age = " + age);

        } catch (Exception e) {
    
            System.out.println("出错了!!!");
            e.printStackTrace();
        }
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51800059/article/details/120189786

智能推荐

发送邮件工具类_发送邮件 filestoragetype-程序员宅基地

文章浏览阅读250次。发送邮件工具类package com.wfsc.utils;import com.wfsc.entity.User;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.io_发送邮件 filestoragetype

CNN卷积神经网络介绍_cnn的优势-程序员宅基地

文章浏览阅读6.5k次,点赞3次,收藏59次。1简介1.1离散卷积1.2池化2卷积算法2.1没有零填充,单位跨度2.2零填充,跨步2.2.1一半(相同)的填充2.2.2全填充2.3无零填充,非跨步2.4零填充,非跨步3池算术184转置卷积算法194.1卷积作为矩阵运算4.2转置卷积4.3无零填充,跨步,转置4.4零填充,跨步,转置4.4.1一半(相同)填充,转置4.4.2全填充,转置4.5无零填充,非跨步,..._cnn的优势

打印机在计算机里被删掉,打印机显示正在删除怎么办 打印机显示正在删除解决办法...-程序员宅基地

文章浏览阅读3k次。打印机打印后,总是显示正在删除怎么办?有什么办法可以解决?下面就给大家带来 打印机显示正在删除解决办法 ,一起来看看。方法一:删除打印机打印任务时,电脑提示正在删除,却一直没有显示删除。其实,打印任务可能已经被删除了,只是电脑没有显示而已。最简单的方法,关闭打印机,重新打印打印机电源。这时候再检查打印任务,就已经全部删除了。这是由于,当前系统下,某文件有可能正在被系统本身或是其他应用软件调用,而正..._打印机一直正在删除怎么办

python opencv resize函数_python opencv 等比例调整(缩放)图片分辨率大小代码 cv2.resize()...-程序员宅基地

文章浏览阅读1.3k次。# -*- coding: utf-8 -*-"""@File : 200113_等比例调整图像分辨率大小.py@Time : 2020/1/13 13:38@Author : Dontla@Email : [email protected]@Software: PyCharm"""import cv2def img_resize(image):height, width = image...._opencv小图等比例缩放

【OFDM、OOK、PPM、QAM的BER仿真】绘制不同调制方案的误码率曲线研究(Matlab代码实现)-程序员宅基地

文章浏览阅读42次。对于这些调制技术的误码率(BER)研究是非常重要的,因为它们可以帮助我们了解在不同信道条件下系统的性能表现。通过以上步骤,您可以进行OFDM、OOK、PPM和QAM的误码率仿真研究,并绘制它们的误码率曲线,以便更好地了解它们在不同信道条件下的性能特点。针对这些调制技术的BER研究是非常重要的,可以帮助我们更好地了解这些技术在不同信道条件下的性能表现,从而指导系统设计和优化。6. 分析结果:根据误码率曲线的比较,分析每种调制方案在不同信噪比条件下的性能,包括其容忍的信道条件和适用的应用场景。_ber仿真

【已解决】Vue的Element框架,日期组件(el-date-picker)的@change事件,不会触发。_el-date-picker @change不触发-程序员宅基地

文章浏览阅读2.5w次,点赞3次,收藏3次。1、场景照抄官方的实例,绑定了 myData.Age 这个值。实际选择某个日期后,从 vuetool(开发工具)看,值已经更新了,但视图未更新。2、尝试绑定另一个值: myData,可以正常的触发 @change 方法。可能是:值绑定到子对象时,组件没有侦测到。3、解决使用 @blur 代替 @change 方法。再判断下 “值有没有更新” 即可。如有更好的方法,欢迎评论!..._el-date-picker @change不触发

随便推点

Roser S.Pressman在UMLChina交流实录-程序员宅基地

文章浏览阅读2.2k次。 UMLChina第十三期专家交流实录返回首页 返回目录北京时间2002年1月10日(星期四)晚上21:30-23:30 嘉宾:Roser S.Pressman博士是软件工程领域国际知名的咨询专家和作者,R.S. Pressman & Associates, Inc的创始人,已有超过30年的产业经验,主要从事工程产品软件和系统软件的开发技术工

【Linux】shell编程1(shell脚本书写格式、脚本中的环境变量、普通变量、自定义环境变量、变量数组、位置变量、状态变量、内置变量、变量扩展)_linux脚本格式-程序员宅基地

文章浏览阅读2.4k次。${parameter:-word}如果parameter的变量值为空或者未赋值,则会返回word字符串代替变量值${parameter:=word}如果parameter的变量值为空或者未赋值,则设置这个变量值为word,返回值也是word${parameter:?word} 如果parameter的变量值为空或者未赋值,那么word字符串会被当做标准错误输出,否则输出变量的值${parameter:+word} 如果parameter的变量值为空或者未赋值,则输出空值,否则wo_linux脚本格式

聊聊线程之run方法_start 是同步还是异步-程序员宅基地

文章浏览阅读2.4k次。话不多说参考书籍 汪文君补充知识:start是异步,run是同步,start的执行会经过JNI方法然后被任务执行调度器告知给系统内核分配时间片进行创建线程并执行,而直接调用run不经过本地方法就是普通对象执行实例方法。什么是线程?1.现在几乎百分之百的操作系统都支持多任务的执行,对计算机来说每一个人物就是一个进程(Process),在每一个进程内部至少要有一个线程实在运行中,有时线..._start 是同步还是异步

制作非缘勿扰页面特效----JQuery_单击标题“非缘勿扰”,<dd>元素中有id属性的<span>的文本(主演、导演、标签、剧情-程序员宅基地

文章浏览阅读5.3k次,点赞9次,收藏34次。我主要用了层次选择器和属性选择器可以随意选择,方便简单为主大体CSS格式 大家自行构造网页主体<body> <div class='main' > <div class='left'> <img src="images/pic.gif" /> <br/><br/> <img src="images/col.gif" alt="收藏本片"/&_单击标题“非缘勿扰”,元素中有id属性的的文本(主演、导演、标签、剧情

有了这6款浏览器插件,浏览器居然“活了”?!媳妇儿直呼“大开眼界”_浏览器插件助手-程序员宅基地

文章浏览阅读901次,点赞20次,收藏23次。浏览器是每台电脑的必装软件,去浏览器搜索资源和信息已经成为我们的日常,我媳妇儿原本也以为浏览器就是上网冲浪而已,哪有那么强大,但经过我的演示之后她惊呆了,直接给我竖起大拇指道:“原来浏览器还能这么用?大开眼界!今天来给大家介绍几款实用的浏览器插件,学会之后让你的浏览器“活过来”!_浏览器插件助手

推荐文章

热门文章

相关标签