Properties+重温Map+本地计数器Map方法Properties的方法用Properties的好处
昨天想写一个记账本,发现并不能把项目名称与内容关联起来,于是乎我想到了map,可是又不知道map储存到文件中又怎么读出来,幸好今天遇到了properties Properties是Hashtable的子类,Hashtable实现Map接口 所以Properties其实是一个Map
Map(映射)
首先Map是一个接口,所以实例化找他的子类HashMap、LinkedHashMap和TreeMap 不同于List和Set的是,Map并不实现Collection,所以不能用Collections的方法
Map方法
构造函数
和以前一样 Map
添加
put(Key key,Value value):void putAll(Map xxxx):void复制映射 相当与容器中的add()和addAll() 此时如果存在旧的键值对,并不是添加,而是覆盖
得到
get(Key key):Value 若该键不存在,则返回null,相当于Collection中的get(索引) keySet():Set 返回Key的Set视图,因为key不可重复,所以返回不可重复的Set视图,而不是List values():Collection 返回Value的Collection(实际是List)视图,因为Value可以重复,所以返回可以重复的List视图 entrySet():Set
判断
isEmpty():boolean containsKey(Key key):boolean containsValue(Value value):boolean
操作
clear():void 清空 remove(Key key):Value 返回被删除的值 size():int 返回键值对的数量
hashCode():int 返回映射中各项哈希值之和 equals(Map another):boolean 比较两个引用是否相等 看到这里,我们发现在Map接口中重写了java.lang.Object中的equals(重写成各项哈希值之和)和hashCode()方法 使得equals是比较内容,而不是比较引用 又!是在Map中重写的,所以对Map下的所有子类之间都可以用equals去比较!
Properties(属性列表)
Properties的方法
构造方法
Properties(): Properties(Properties default): 因为Properties中有一个字段Properties defaults,这是一个默认的属性列表,包含未找到的默认值,所以第二的构造方法,就把default作为默认属性列表
添加
因为Properties必须添加
得到
getProperty(String key):String 得到值 stringPropertySet():Set与Set转换
写出去
store(OutputStream out,String comments):void 用字节流输出 store(Writer out,String comments):void 用字符流输出 参数comments是注释,会出现的文件的首行,格式#comments 不过注释千万不要写中文,因为好像是编码的原因,中文会出现乱码 list(PrintStream out):void list(PrintWriter out):void 将列表属性输出到指定的输出流可以用来打印 目前我还没知道有什么作用 注意:上面两个方法都不输出其默认属性列表 写入各个项后,自动刷新输出流。此方法返回后,输出流仍保持打开状态。
读进来
load(InputStream in):void load(Reader):void 和写进来的方法一样,此方法返回后,指定的流仍保持打开状态。 对应相应输出时候的格式(字节or字符)
用Properties的好处
输出到文本的时候带有时间(相当于打印date对象),且自动换行 输入的时候自动识别键和值 因为值的数据类型是String,所以如果想对int进行操作就有点麻烦,这里有一个方法: java.lang.Integer.parseInt(String) 这是一个静态的方法,将十进制的字符串转换为数字
用Properties做一个登录计数器
import java.util.*;
import java.io.*;
public class LoginAccounter{
public static void main(String[] args)throws IOException{
File accounter=new File("accounter.properties");
FileOutputStream out=new FileOutputStream(accounter,accounter.isFile());
FileInputStream in=new FileInputStream(accounter);
Properties account=new Properties();
account.load(in);
int time=Integer.parseInt(account.getProperty("Time","0"));
if((++time)<3){
System.out.println("少侠,风尘仆仆,梦幻西游一直在您左右,我们为您准备了在线大礼包,请听我道来rn您已经来到梦幻西游"+time+"次了,再登录"+(3-time)+"次,您就可以获得**在线大礼包**!!!");}
else{System.out.println("少侠,您已经满足领取在线大礼包(登录10次)的条件了,请少侠移步至梦幻精灵处领取!!感谢您支持梦幻西游!");}
account.setProperty("Time",(time)+"");
account.store(out,"LoginAccounter");
}}
- EF 约定介绍
- 关于EF Code First模式不同建模方式对建表产生的影响
- C# 命名空间和程序集
- C# new关键字和对象类型转换(双括号、is操作符、as操作符)
- 防止小程序多次点击跳转解决方案
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- Web API系列之三 基本功能实现
- 微信小程序的省市选择组件 citySelector分享
- 详述 Java 语言中的 String、StringBuffer 和 StringBuilder 的使用方法及区别
- Class与Style绑定
- 机器学习并不难
- android的RadioGroup讲解
- asp.net MVC 应用程序的生命周期
- 091031 T PowerShell Solution
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringBoot 配置Redis操作
- SpringBoot 自定义banner (小彩蛋)
- SpringBoot使用Mybatis 快速入门
- 【CTR】ESMM:多任务联合学习
- 状态管理之Vuex (三) store利用module拆分
- MySQL 案例:无主键表产生的延迟
- 面试官真的会问:new的实现以及无new实例化
- Android Hilt实战初体验: Dagger替换成Hilt
- Linux系列之学会使用CURL命令
- 潘石屹用python解决100个问题 | 斐波那契数列
- [869]pandas的dataFrame的行列索引操作
- JSP的文件上传处理
- 将SAP CRM WebClient UI的表格导出成PDF
- java.lang.ClassNotFoundException org.w3c.dom.ElementTraversal
- docker一键部署SpringBoot项目