用户模板
import java.io.Serializable;
public class User implements Serializable{
//账号
private String id;
//密码
private String password;
public User(String id, String password) {
super();
this.id = id;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public static void main(String[] args) {
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Zuoye02 {
static Scanner sc = new Scanner(System.in);
public static Map<String,String> map = new HashMap();
static String choose = null;
public static void logo() {
//注册
System.out.println("注册:");
System.out.println("请输入您要注册的账号:");
String id = sc.next();
System.out.println("请输入您要注册账号的密码:");
String password = sc.next();
map.put(id,password);
}
public static void main(String[] args) {
//写一个集合
//需求:
//循环注册十个账号,保证程序重启之后,使用这十个账号都能登录成功
//调用注册方法:
logo();
System.out.println("注冊成功!");
start:while(true) {
System.out.println("是否继续注册(y/n)");
String choose = sc.next();
if(choose.equalsIgnoreCase("y")) {
logo();
}else {
break start;
}
}
//要保证系统重启后再使用账号也能登录成功,那么就要把程序(注册好的账号)=>文件夹
//而这里是把对象给对象流化了 可以用序列化和反序列化
//1 地址 2 输出: 调用FileOutStra.. ObjectOutStr.. 两个类 write
FileOutputStream fos = null;
ObjectOutputStream ops = null;
//再输入 读取 read FileIn..... ObjectRead
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fos = new FileOutputStream("C:/User/User.txt");
fis = new FileInputStream("C:/User/User.txt");
try {
ops = new ObjectOutputStream(fos);
ois = new ObjectInputStream(fis);
ops.writeObject(map);
System.out.println("注册成功!");
ops.flush();
ops.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Map<String, String> userIn = null;
System.out.println("用户登录:");
System.out.println("请输入用户账号:");
try {
try {
userIn = (Map<String,String>)ois.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//登录
String id = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
User in = new User(id,password);
if(userIn.containsKey(in.getId())&&userIn.containsValue(in.getPassword())) {
System.out.println("登录成功!");
}else if(!userIn.containsKey(in.getId())||!userIn.containsValue(in.getPassword())){
System.out.println("密码输入错误");
}else {
System.out.println("登录失败!");
}
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}finally {
try {
fis.close();
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
//测试读取 文本类是否保存了我们注册好的账号
public class Demo {
public static void main(String[] args) {
//读取 用反序列化 输入
Map<String,String> map1 = new HashMap();
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("C:/User/User.txt");
try {
ois = new ObjectInputStream(fis);
try {
Map<String,String> user = (Map<String,String>)ois.readObject();
for (Map.Entry<String, String> demo : user.entrySet()) {
System.out.println("用户账号是:"+demo.getKey()+"用户密码是:"+demo.getValue());
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
ois.close();
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
测试结果 先测在程序中注册成功后是否能登录成功(没重启的)
看文本是否被程序传进了东西
发现有被存入内容后,测试一下是不是我们刚刚注册好的账号:
这里我就发现一个BUG 明明注册三个但却只显示两个但这个在后面才知道这个是正确的 (因为Map集合就是为了确保账号的唯一性) 是在注册那里少加了条件
经过我的一番独自思考,才发现是在注册的时候少加了条件
本来我用Map集合就是为了确保账号的唯一性 但后面做着做着却完记了
于是我就是在注册的那边的代码进行了修改(开闭原则)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Zuoye02 {
static Scanner sc = new Scanner(System.in);
public static Map<String, String> map = new HashMap();
static String choose = null;
public static void logo() {
// 注册
System.out.println("注册:");
System.out.println("请输入您要注册的账号:");
String id = sc.next();
System.out.println("请输入您要注册账号的密码:");
String password = sc.next();
//以下为修改内容:
for (Map.Entry<String, String> entry : map.entrySet()) {
if (id.equalsIgnoreCase(entry.getKey())) {
System.out.println("用户已存在!");
return;
}
}
//这里结束
map.put(id, password);
}
我加入判断后再输出的结果:
原来输入可以正确的,因为用户已存在 则就没有将其存入文本这样再输出:
就是只能输出用户账号唯一的用户,确保了用户账号的唯一性 但有时也要看需求而定
本答案仅供参考