Java 用IO流实现用户的注册与登录,并且将用户的账号密码储存

从文件中读取存储的用户名和密码,并且实现用户的注册和登录操作。
不使用Propreties类,而是使用IO流中的字节流读取信息,就需要使用String类的split方法,并且提前做好标记符号
split方法是将字符串中按指定的符号分割开,比如"123#456",就变成"123",“456”,而且是个数组,所以可以通过split方法先分割开每个用户,然后再分割开每个用户的用户名和密码
这里没有把读取文件中的用户名和密码写成方法,所以在用户注册成功后又复制粘贴了一遍读取操作,看着有点累赘
因为是一个字节一个字节的读取文本,所以不能使用中文注册用户名,会乱码

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Created by 不要剁我爪 on 2020/12/3.
 */
public class LoginSystemC {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        File file = new File("C:\\Users\\hasee\\Desktop\\JAVA study\\JavaSE\\src\\com\\yaorange\\day18\\userInformationC.ini");
        InputStream inputS = new FileInputStream(file);
        OutputStream outputS = new FileOutputStream(file,true);//不写true的话会导致每次都是覆盖储存文件
       	ArrayList<String> users = new ArrayList<>();
        boolean flag1 = true;
        while (flag1) {//读取每个用户名与密码,以#为结尾,一个字符串一个字符串的写入
            int read;
            StringBuffer sB = new StringBuffer();
            while ((read = inputS.read()) != '#') {
                if (read == -1) {//读到末尾了,跳出
                    flag1 = false;
                    break;
                }
                sB.appendCodePoint(read);
            }
            if(flag1==false)
                break;
            users.add(sB.toString());//将用户写入用户列表
        }
        ArrayList<String> userlist = new ArrayList<>();//用户名列表
        ArrayList<String> pwdlist = new ArrayList<>();//密码列表
        for (String user1 : users) {
            String arr[] = user1.split("-");//将用户名与密码分割开
            userlist.add(arr[0]);
            pwdlist.add(arr[1]);
        }

        boolean flag = true;
        while (flag) {
            System.out.println("1、注册 2、登录 3、退出");
            int x = scanner.nextInt();
            String dontneed = scanner.nextLine();
            switch (x) {
                case 1:
                    System.out.println("请输入用户名:");
                    String username = scanner.nextLine();
                    if (userlist.contains(username)) {
                        System.out.println("用户名存在,不能注册");
                        break;
                    } else {
                        System.out.println("请输入密码:");
                        String pwd = scanner.nextLine();
                        outputS.write((username+"-"+pwd+"#").getBytes());
                        System.out.println("用户注册成功");
                        //刷新刚注册的用户,不然会导致刚注册的用户无法登录
                        users = new ArrayList<>();
                        flag1 = true;
                        while (flag1) {
                            int read;
                            StringBuffer sB = new StringBuffer();
                            while ((read = inputS.read()) != '#') {
                                if (read == -1) {
                                    flag1 = false;
                                    break;
                                }
                                sB.appendCodePoint(read);
                            }
                            if(flag1==false)
                                break;
                            users.add(sB.toString());
                        }
                         userlist = new ArrayList<>();//用户名列表
                        pwdlist = new ArrayList<>();//密码列表
                        for (String user1 : users) {
                            String arr[] = user1.split("-");
                            System.out.println(user1);
                            userlist.add(arr[0]);
                            pwdlist.add(arr[1]);
                        }
                        break;
                    }
                case 2:
                    System.out.println("请输入用户名:");
                    String s1 = scanner.nextLine();
                    if (userlist.contains(s1)) {
                        System.out.println("请输入密码:");
                        String pwdL = scanner.nextLine();
                        if (pwdL.equals(pwdlist.get(userlist.indexOf(s1))))
                            System.out.println("登录成功");
                        else System.out.println("密码输入错误");
                        break;
                    } else {
                        System.out.println("用户名不存在");
                        break;
                    }
                case 3:
                    flag = false;
                    break;
            }

        }
        inputS.close();
        outputS.close();
        scanner.close();
    }
}
下面是一个用Java实现的可以存储、验证和修改账号密码的类示例: ```java import java.io.*; import java.util.HashMap; public class AccountManager { private static final String FILE_NAME = "accounts.txt"; private HashMap<String, String> accounts; public AccountManager() { accounts = new HashMap<>(); try { File file = new File(FILE_NAME); if (file.exists()) { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(":"); if (parts.length == 2) { accounts.put(parts[0], parts[1]); } } reader.close(); } } catch (IOException e) { e.printStackTrace(); } } public boolean checkAccount(String username, String password) { if (accounts.containsKey(username)) { return accounts.get(username).equals(password); } return false; } public boolean addAccount(String username, String password) { if (accounts.containsKey(username)) { return false; } accounts.put(username, password); saveAccounts(); return true; } public boolean modifyPassword(String username, String oldPassword, String newPassword) { if (accounts.containsKey(username) && accounts.get(username).equals(oldPassword)) { accounts.put(username, newPassword); saveAccounts(); return true; } return false; } private void saveAccounts() { try { FileWriter writer = new FileWriter(FILE_NAME); for (String username : accounts.keySet()) { writer.write(username + ":" + accounts.get(username) + "\n"); } writer.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例代码中,我们使用了一个哈希表来存储账号和密码。在构造函数中,我们从文件中读取账号和密码,并将它们存储到哈希表中。`checkAccount` 方法用来验证账号和密码是否匹配。`addAccount` 方法用来添加一个新账号,如果账号已存在,则返回 `false`。`modifyPassword` 方法用来修改账号的密码,如果旧密码不正确,则返回 `false`。`saveAccounts` 方法用来将哈希表中的账号和密码存储到文件中。 使用示例: ```java public static void main(String[] args) { AccountManager manager = new AccountManager(); String username = "user1"; String password = "123456"; manager.addAccount(username, password); System.out.println(manager.checkAccount(username, password)); // true System.out.println(manager.checkAccount(username, "wrongpassword")); // false manager.modifyPassword(username, password, "newpassword"); System.out.println(manager.checkAccount(username, "newpassword")); // true } ``` 在这个示例中,我们创建了一个 `AccountManager` 对象,添加了一个账号和密码,验证了账号和密码是否匹配,修改了密码,并再次验证了账号和密码是否匹配。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值