18.7 与流打交道的Properties集合

Properties介绍 :

是一个Map体系的集合类 
Properties可以保存到流中或从流中加载 
属性列表中的每个键及其对应的值都是一个字符串 

后期的加载配置文件都需要properties的参与

特有方法

演示代码:

import java.util.Properties;
import java.util.Set;

/**
 *  是一个Map体系的集合类 Properties可以保存到流中或从流中加载
 *  属性列表中的每个键及其对应的值都是一个字符串
 */
public class PropertiesDemo {
    public static void main(String[] args) {
        //创建集合对象
        //Properties<String,String> prop = new Properties<String,String>(); //错 误  Properties 不是泛型类

        Properties pro = new Properties();
        //储存元素
        pro.put("张三丰","太极");
        pro.put("郭靖","降龙十八掌");
        pro.put("杨过","黯然销魂掌");

        //遍历集合
        Set<Object> keySet = pro.keySet();
        for (Object key : keySet) {
            Object value = pro.get(key);
            System.out.println(key + "," + value);
        }

        System.out.println("---------------");
        PropertiesMathd();
    }

    /**
     * Object setProperty(String key, String value)
     * 设置集合的键和值,都是String类型,底层调用 Hashtable方 法 put
     * String getProperty(String key) 使用此属性列表中指定的键搜索属性
     * Set stringPropertyNames()
     * 从该属性列表中返回一个不可修改的键集,其中键及其对应的 值是字符串
     */
    //Properties集合中的特有方法
    public static void PropertiesMathd(){
        Properties pro = new Properties();
        //Object setProperty(String key, String value)设置集合的键和值,
        // 都是String类型,底层调用 Hashtable方法 put
        pro.setProperty("001","tom");
        pro.setProperty("002","tony");
        pro.setProperty("003","jack");

        //Set stringPropertyNames()
        // 从该属性列表中返回一个不可修改的键集,其中键及其对应的 值是字符串
        //Set<String> key = pro.stringPropertyNames();
        //System.out.println(key);

        //String getProperty(String key) 使用此属性列表中指定的键搜索属性
        //String s = pro.getProperty("001");
        //System.out.println(s);

        //遍历
        Set<String> key = pro.stringPropertyNames();
        for (String s : key) {
            String value = pro.getProperty(s);
            System.out.println(s + "," + value);
        }
    }
}

运行结果:

 

Properties和IO流相结合的方法

代码演示:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

/**
 * void load(InputStream inStream)
 * 从输入字节流读取属性列表(键和元素对)
 * void load(Reader reader) 从输入字符流读取属性列表(键和元素对)
 * void store(OutputStream out, String comments)
 * 将此属性列表(键和元素对)写入此 Properties表中,以适合于使用 load(InputStream)方法的格式写入输出字节流
 * void store(Writer writer, String comments)
 * 将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式写入输出字符流
 */
public class PropertiesStreamDemo {
    public static void main(String[] args) throws IOException{
        myStore();
        myLoad();
    }

    //将文件中的数据加载到集合
    private static void myLoad() throws IOException{
        Properties pro = new Properties();
        FileReader fr = new FileReader("day10\\fw.txt");

        //void load(Reader reader) 从输入字符流读取属性列表(键和元素对)
        pro.load(fr);
        fr.close();

        System.out.println(pro);
    }

    //将集合中的数据写到文件中
    private static void myStore() throws IOException {
        Properties pro = new Properties();
        pro.setProperty("001","朱茵");
        pro.setProperty("002","张曼玉");
        pro.setProperty("003","王祖贤");

        //void store(Writer writer, String comments)
        // 将此属性列表(键和元素对)写入此 Properties表中,
        // 以适合使用 load(Reader)方法的格式写入输出字符流
        FileWriter fw = new FileWriter("day10\\fw.txt");
        pro.store(fw,null);
        fw.close();
    }
}

运行结果:

集合中数据写入文件:

文件中数据读取到集合中:

小游戏案例:

需求:实现猜数字小游戏只能试玩3次,如果还想玩,提示:游戏试玩已结束,想玩请充值(www.java.cn) 

实现代码:注释含步骤分析

游戏类:

import java.util.Random;
import java.util.Scanner;

/**
 * @PackageName: cn.itcast_1
 * @ClassName: GuesNumber
 * @Author: LiLeNing
 * @Date: 2019/11/26 18:54
 * @Description: 猜数字游戏
 */
public class GuesNumber {
    public static void start() {
        System.out.println("猜数字游戏开始啦");
        System.out.println("请输入1~100之间的自然数");
        //创建Random 类变量
        Random ran = new Random();
        //变量   使用功能  nextInt()获取1~100随机数
        int ranNumber = ran.nextInt(100)+1;
        //System.out.println(ranNumber);
        //创建Scanner类变量
        Scanner sc = new Scanner(System.in);
        while(true){
            //获取键盘输入
            int number = sc.nextInt();
            //随机数和用户输入的数据进行比较
            if(number > ranNumber){
                System.out.println("Sorry 猜大了");
            }else if(number < ranNumber){
                System.out.println("Sorry 猜小了");
            }else{
                System.out.println("恭喜你猜对啦");
                break;
            }
        }
    }
}

测试类:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

/**
 *  1. 写一个游戏类,里面有一个猜数字的小游戏
 *  2. 写一个测试类,测试类中有main()方法,main()方法中写如下代码:
 *  从文件中读取数据到Properties集合,用load()方法实现
 *  文件已经存在:game.txt
 *  里面有一个数据值:count=0
 *  通过Properties集合获取到玩游戏的次数
 *  判断次数是否到到3次了
 *  如果到了,给出提示:游戏试玩已结束,想玩请充值(www.java.cn)
 *  如果不到3次:
 *  次数+1,重新写回文件,用Properties的store()方法实现玩游戏
 */
public class PropertiesGame {
    public static void main(String[] args) throws IOException {
        //通过Properties集合获取到玩游戏的次数
        Properties pro = new Properties();
        FileReader fr = new FileReader("day10\\game.txt");
        pro.load(fr);
        fr.close();

        String count = pro.getProperty("count");
        int number = Integer.parseInt(count);

        //判断次数是否到到3次了
        if(number >= 3){
            System.out.println("游戏试玩已结束,想玩请充值(www.java.cn)");
        }else{
            //玩游戏
            GuesNumber.start();

            //次数+1,重新写回文件,用Properties的store()方法实现玩游戏
            number++;
            pro.setProperty("count",String.valueOf(number));
            FileWriter fw = new FileWriter("day10\\game.txt");
            pro.store(fw,null);
            fw.close();
        }
    }
}

运行结果:

控制台:

运行三次后的文件:

超过三次后控制台的结果:

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值