循环注册十个账号,保证程序重启之后,使用这十个账号都能登录成功
用户模板
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); }
我加入判断后再输出的结果:
原来输入可以正确的,因为用户已存在 则就没有将其存入文本这样再输出:
就是只能输出用户账号唯一的用户,确保了用户账号的唯一性 但有时也要看需求而定
本答案仅供参考