Properties 集合
是HashTable的子类
也就是具备Map集合的特点
键值对形式存储 键值对都是字符串 不需要写泛型
是集合 和 IO技术相结合的容器
常用方法:
Object setProperty(String key,String value)向集合中存储 key value 键值对
String getProperty(String key) 根据键 获取值
Enumeration propertyNames() 遍历集合
Set<String> stringPropertyNames() 遍历集合
void load(InputStream inStream) 将流中的数据加载进集合
void store(OutputStream outStream,String comments) 将集合中的数据 存入到流中 并且保存到文件上
String comments 备注 可写可不写 但是参数个数不能少 可传null
void list(PrintStream out) 将属性列表输出到指定的输出流中
特点:
可以用于键值对形式的配置文件
将配置信息持久化保存到文件中
.properties 配置文件 存储键值对 键值对以等号进行分割
package test;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;
public class test_1 {
public static void main(String[] args) throws IOException, AWTException {
// TODO Auto-generated method stub
/*练习 创建配置文件 login.properties 向配置文件中写入 admin=123456 初始化数据(createProperties方法名)
* 控制台操作列表(menu方法)
* 1.登录(login方法)
* 2.修改密码(resetPassword方法)
* 3.增加新用户(register方法) 用户名 必须是字母 密码可以是字母 和数字的组合
* 4.退出exit
* 5.[扩展]删除指定用户(deleteUser 方法)
* 选择1
* 提示"请输入用户名和密码"
* 进入配置文件中 进行 输入的校对
* 相同 "登录成功" 不同 "登陆失败"
* [扩展] 登录成功 显示用户列表
* 选择2
* 提示"请输入用户名 旧密码 和 新密码"
* 进入配置文件中 校对 用户名 和 旧密码 是否一致 如果一致 则修改密码 不一致 显示"无法修改"
* 选择3
* 提示"请输入新用户名和密码"
* 进入配置文件 将新用户名和密码进行存储
* 选择4 退出系统
* 选择5
* 提示"请输入要删除的用户名 和 密码"
* 输入后 提示 "是否要删除 Y/N"
* 输入Y -->完成删除
* 输入N -->回到主菜单
* 以上操作完成 均返回主菜单 当退出时 才结束程序 */
// createProperties();//初始化数据
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// menu(br);
int y;
Properties ps = new Properties();
Scanner sc = new Scanner(System.in);
boolean tr = false;
while (true) {
if (tr == false) {
System.out.println("1.登录(login方法):");
} else {
System.out.println("=====欢迎进入系统=====");
System.out.println("2.修改密码:");
System.out.println("3.增加新用户:");
System.out.println("4.显示所有用户");
System.out.println("5.删除指定用户:");
System.out.println("6.退出系统");
}
String str = sc.next();
if ("exit".equals(str))
break;
y = Integer.parseInt(str);
switch (y) {
case 1:
FileInputStream fis = new FileInputStream("login.properties");
ps.load(fis); //由文件输入流加载到properties集合
System.out.println("请输入用户名和密码:");
String UserName = sc.next();
String passWord = sc.next();
String psw = ps.getProperty(UserName);
if (psw != null && passWord.equals(psw)) {
cls.clear();
System.out.println("登录成功");
tr = true;
}
fis.close();
break;
case 2:
FileOutputStream fos = new FileOutputStream("login.properties");
System.out.println("请输入用户名:");
String UserName1 = sc.next();
System.out.println("请输入旧密码:");
String password1 = sc.next();
System.out.println("请输入新密码:");
String password2 = sc.next();
String psw1 = ps.getProperty(UserName1);
if (psw1 != null && password1.equals(psw1)) {
cls.clear();
ps.setProperty(UserName1, password2);
System.out.println("密码修改成功!");
ps.store(fos, UserName1 + "=" + password2);
} else {
System.out.println("输入密码不对,修改失败!");
}
fos.close();
break;
case 3:
System.out.println("请输入名称:");
String UserName2 = sc.next();
if (ps.containsKey(UserName2)) {
System.out.println("用户名已存在!");
break;
}
System.out.println("请输入密码:");
String passWord3 = sc.next();
FileOutputStream fos1 = new FileOutputStream("login.properties");
ps.setProperty(UserName2, passWord3);
System.out.println("恭喜,注册成功!");
ps.store(fos1, UserName2 + "=" + passWord3);
break;
case 4:
//遍历方式一 Enumeration<Object> propertyNames() 遍历集合
Enumeration<String> en = (Enumeration<String>)ps.propertyNames();
while(en.hasMoreElements())
{
String key = en.nextElement();
String value = ps.getProperty(key);
System.out.println(key+"="+value);
}
//遍历方式二 Set<String> stringPropertyNames() 遍历集合
Set<String> st = ps.stringPropertyNames();
Iterator<String> it = st.iterator();
while(it.hasNext())
{
String key1 = it.next();
String value1 = ps.getProperty(key1);
System.out.println(key1+"="+value1);
}
break;
case 5:
FileOutputStream fos2 = new FileOutputStream("login.properties");
System.out.println("请输入要删除的用户名:");
String UserName3 = sc.next();
System.out.println("请输入密码:");
String passWord4 = sc.next();
String psw2 = ps.getProperty(UserName3);
if (psw2 != null && passWord4.equals(psw2)) {
System.out.println("是否要删除y/n:");
char yu;
yu = sc.next().charAt(0);
if (yu == 'y') {
ps.remove(UserName3, passWord4);
System.out.println("删除成功!");
ps.store(fos2, null);
}
if (yu == 'n') {
break;
}
} else {
System.out.println("用户名和密码对不上,无法删除!");
}
break;
case 6:
tr = false;
System.out.println("====请重新登录!====");
break;
default:
System.out.println("输入信息有误!");
break;
}
// cls.clear();
}
}
}
class cls {
public static void clear() throws AWTException {
Robot r = new Robot();
r.mousePress(InputEvent.BUTTON3_MASK); // 按下鼠标右键
r.mouseRelease(InputEvent.BUTTON3_MASK); // 释放鼠标右键
r.keyPress(KeyEvent.VK_CONTROL); // 按下Ctrl键
r.keyPress(KeyEvent.VK_R); // 按下R键
r.keyRelease(KeyEvent.VK_R); // 释放R键
r.keyRelease(KeyEvent.VK_CONTROL); // 释放Ctrl键
r.delay(100);
}
}