Properties+重温Map+本地计数器
昨天想写一个记账本,发现并不能把项目名称与内容关联起来,于是乎我想到了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+本地计数器的更多相关文章
- excel中的数据导出为properties和map的方法
在做项目的过程中,经常需要处理excel数据,特别是和业务人员配合时,业务人员喜欢使用excel处理一些数据,然后交给我们技术人员进行程序处理.利用POI读取写入excel数据,是经常使用的一个情景. ...
- 基于Java Properties类设置本地配置文件
一.Java Properties类介绍 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件, ...
- java_spring_List,Map,Properties,Set注入与遍历
package com.dao.bean.www; import java.util.List; import java.util.Map; import java.util.Properties; ...
- Java基础知识强化之IO流笔记66:Properties的概述 和 使用(作为Map集合使用)
1. Properties的概述 Properties:属性集合类.是一个可以和IO流相结合使用的集合类. 该类主要用于读取以项目的配置文件(以.properties结尾的文件 和 xml文件). ...
- [Spring学习笔记 2 ]装配各种类型的属性 map,list,array,null,properties
一.spring Ioc容器补充(1) Spring Ioc容器 DI(依赖注入): 注入的方式:设值方法注入setter(属性注入)/构造子注入(构造函数传入依赖的对象)/字段注入field(注解) ...
- Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)
1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...
- 【Properties文件】Java使用Properties来读取配置文件
配置文件位置及内容 执行结果 程序代码 package Utils.ConfigFile; import java.io.BufferedInputStream; import java.io.B ...
- 3. Map与Tuple
一. Map 对偶 (1)对偶是一个映射.多个对偶形成map (2)对偶的表示:(k,v)或者k->v Map(哈希类型) (1)map的声明与查询 scala> val map1 = M ...
- spring加载properties配置文件
public static void main(String[] args){ String path="E:/workspace/bocMarketData/src/config/P ...
随机推荐
- unity生成的WP8.1工程的Title本地化实现
不同于WP本身工程的实现,unity的工程在package.appxmanifest文件中已经定义了 <Resources> <Resource Language="x-g ...
- Java中的数是用补码表示的检验
一.基本介绍(关于下列五个定义来自http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html#!comments,谢原 ...
- JavaScript内存优化
JavaScript内存优化 相对C/C++ 而言,我们所用的JavaScript 在内存这一方面的处理已经让我们在开发中更注重业务逻辑的编写.但是随着业务的不断复杂化,单页面应用.移动HTML5 应 ...
- PHP的学习--生成器Generators
生成器总览 (PHP 5 >= 5.5.0, PHP 7) 生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低. 生成器允 ...
- 使用office生成PDF文件
网络上有很多word转pdf的软件,功能效果不尽相同,对于想要把word转换成pdf格式的网友来说,一款实用强大的工具是必不可少的,踏破铁鞋无觅处,原来office2010就有符合你要求的功能.PDF ...
- 【web前端面试题整理03】来看一点CSS相关的吧
前言 昨天我们整理了14到js的题,今天我们再来整理14到CSS相关的题目,昨天整理时候时间有点晚了我便有点心浮气躁,里面的一些题需要再次解答,好了看看今天有些什么吧. PS:我这里挑一点来做就好了, ...
- Simptip – 使用 Sass 制作的 CSS Tooltip 效果
Simptip 是一个简单基于 Sass 的 CSS 工具提示效果.帮助你在网站中加入在不同的方向(上.左.右.下)的工具提示,也可以设置不同的颜色如成功.信息.警告和危险.最后还有其他特性如软边.半 ...
- JQuery 实现页面无刷新
对于JQuery实现页面无刷新的效果,即:应用这个JQuery这个组件,可以实现在页面上加载数据库中的数据信息,但是并没有给用户页面刷新的感觉,这样既可以有效的进行数据交互,也可以不妨碍用户的其他操作 ...
- 别用symbolicatecrash来解析crash Log了
今天突然发现了一个解析iOS crash log的好方法,忍不住来分享一下. 相信每个做iOS开发的TX都应该不会对symbolicatecrash陌生,我们第一次遇到真机上产生的崩溃日志时,在网上搜 ...
- WCF服务创建与使用(双工模式)
昨天发布了<WCF服务创建与使用(请求应答模式)>,今天继续学习与强化在双工模式下WCF服务创建与使用,步骤与代码如下. 第一步,定义服务契约(Service Contract),注意Se ...