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("少侠,风尘仆仆,梦幻西游一直在您左右,我们为您准备了在线大礼包,请听我道来\r\n您已经来到梦幻西游"+time+"次了,再登录"+(3-time)+"次,您就可以获得**在线大礼包**!!!");}
        else{System.out.println("少侠,您已经满足领取在线大礼包(登录10次)的条件了,请少侠移步至梦幻精灵处领取!!感谢您支持梦幻西游!");}
        account.setProperty("Time",(time)+"");
        account.store(out,"LoginAccounter");
    }}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android群英传

Kotlin Primer·类与对象(上)

932
来自专栏全栈架构

抱歉!不要用Java的语法思维来写Kotlin

如果你是像我一样是一名 优秀的Java开发者 ^_^,而且已经想用kotlin来实现你的程序,那么,抱歉!不要用Java的语法思维来写Kotlin,不要让kot...

1214
来自专栏微信公众号:Java团长

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项...

1633
来自专栏余林丰

Effective Java通俗理解(上)

  这篇博客是Java经典书籍《Effective Java(第二版)》的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗...

2677
来自专栏java达人

最有价值的50道java面试题(二)

来自骆昊的技术专栏 26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchron...

27110
来自专栏阿杜的世界

【转】Java知识点集锦(1~40)

答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primi...

1042
来自专栏calmound

sprintf的用法

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者...

3406
来自专栏微信公众号:Java团长

Java知识点集锦

答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primi...

1211
来自专栏JMCui

读书笔记 之《Thinking in Java》(对象、集合、异常)

一、前言:     本来想看完书再整理下自己的笔记的,可是书才看了一半发现笔记有点多,有点乱,就先整理一份吧,顺便复习下前面的知识,之后的再补上。     真的...

3678
来自专栏cmazxiaoma的架构师之路

你应该会的一道多线程笔试题

2523

扫码关注云+社区