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();
}
}
}
运行结果:
控制台:
运行三次后的文件:
超过三次后控制台的结果: