昨天想写一个记账本,发现并不能把项目名称与内容关联起来,于是乎我想到了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");
}}

Properties+重温Map+本地计数器的更多相关文章

  1. excel中的数据导出为properties和map的方法

    在做项目的过程中,经常需要处理excel数据,特别是和业务人员配合时,业务人员喜欢使用excel处理一些数据,然后交给我们技术人员进行程序处理.利用POI读取写入excel数据,是经常使用的一个情景. ...

  2. 基于Java Properties类设置本地配置文件

    一.Java Properties类介绍 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件, ...

  3. java_spring_List,Map,Properties,Set注入与遍历

    package com.dao.bean.www; import java.util.List; import java.util.Map; import java.util.Properties; ...

  4. Java基础知识强化之IO流笔记66:Properties的概述 和 使用(作为Map集合使用)

    1. Properties的概述  Properties:属性集合类.是一个可以和IO流相结合使用的集合类. 该类主要用于读取以项目的配置文件(以.properties结尾的文件 和 xml文件). ...

  5. [Spring学习笔记 2 ]装配各种类型的属性 map,list,array,null,properties

    一.spring Ioc容器补充(1) Spring Ioc容器 DI(依赖注入): 注入的方式:设值方法注入setter(属性注入)/构造子注入(构造函数传入依赖的对象)/字段注入field(注解) ...

  6. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  7. 【Properties文件】Java使用Properties来读取配置文件

    配置文件位置及内容 执行结果 程序代码 package Utils.ConfigFile;   import java.io.BufferedInputStream; import java.io.B ...

  8. 3. Map与Tuple

    一. Map 对偶 (1)对偶是一个映射.多个对偶形成map (2)对偶的表示:(k,v)或者k->v Map(哈希类型) (1)map的声明与查询 scala> val map1 = M ...

  9. spring加载properties配置文件

    public static void main(String[] args){    String path="E:/workspace/bocMarketData/src/config/P ...

随机推荐

  1. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

  2. 如何安装Oracle Instant Client

    Oracle Instant Client是Oracle发布的轻量级数据库客户端,下面我们来看看官方的定义: Instant Client allows you to run your applica ...

  3. 推荐10个 CSS3 制作的创意下拉菜单效果

    下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...

  4. ASP.NET 程序提交表单数据中带有html标签不能提交或者提交报错问题

    今天在公司做另外的一个项目,又奇葩的遇到一个问题. 在本地自己电脑上怎么测试都是正常的.但是先上服务器就出问题: 用富文本编辑器上传一篇文章,始终报错,又没提示具体什么错误,也没说代码错误,点击提交按 ...

  5. svn冲突问题详解

    开发人员都知道代码管理工具是开发中一个必不可少的工具,这里也不废话详细介绍了.不管你个人喜欢git还是svn还是其他,但还有一大部分公司在使用svn做代码管理工具.这里详细介绍下SVN提交文件时冲突问 ...

  6. 在SQL Server里禁用聚集索引——真的好么?

    有人问了我一个最有意思的问题:“你能禁用聚集索引么?” 对这个问题,我先是吓了一跳,因为我从未想过禁用聚集索引,因为聚集索引代表表数据,对这个最有趣问题,我立即答道:“我认为可以,但是...” 好吧, ...

  7. LINQ的Any方法

    返回布尔值,判断集合中是否有元素满足某一条件. source code: IEnumerable<string> str = new List<string> { " ...

  8. HoverTree开源项目已经实现管理员登录

    ASP.NET开源项目HoverTree已经实现了管理员登录功能,最新代码请到以下网址查看.http://hovertree.com/down/ 点击Clone右边的Download就可以下载最新开发 ...

  9. 快速学习JavaScript面向对象编程

    到处都是属性.方法,代码极其难懂,天哪,我的程序员,你究竟在做什么?仔细看看这篇指南,让我们一起写出优雅的面向对象的JavaScript代码吧! 作为一个开发者,能否写出优雅的代码对于你的职业生涯至关 ...

  10. Node.js系列之ubuntu环境搭建

    ctrl+alt+t打开终端(命令行) 一.准备Node.js所依赖的包(g++,curl,python等) sudo apt-get install g++ curl libssl-dev apac ...