首页 > 编程语言 >Java 用IO流实现用户的注册与登录,并且将用户的账号密码储存

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

时间:2024-08-03 11:17:19浏览次数:10  
标签:Java users 用户 System add IO println new String

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

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


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();
    }
}

二、简易ATM机通过io流存储更改的用户数据

public class FileManager {
    private static final String FILE_NAME = "users.dat";
//ObjectOutputStream 将 List<User> 对象写入到一个名为 users.dat 的文件中。
    public static void saveUsers(List<User> users) {
//创建ObjectOutputStream对象,并将用户列表写入文件。如果发生IOException,会打印信息。
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
            oos.writeObject(users);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
        //使用 ObjectInputStream 从 users.dat 文件中读取 List<User> 对象。
    public static List<User> loadUsers() {
        List<User> users = new ArrayList<>();
        //创建 ObjectInputStream 对象,并读取用户列表。如果文件未找到,则打印一条消息并初始化一个新的用户列表。
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
            users = (List<User>) ois.readObject();
        } catch (FileNotFoundException e) {
            System.out.println("用户数据文件未找到,初始化新数据。");
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("...系统初始化成功");
        return users;	//返回读取的用户列表
    }
}
  • 初始化系统,并在在程序结束前,调用 FileManager.saveUsers(users) 方法,将当前的用户列表保存到文件中。
    public static void main(String[] args) {
        users = FileManager.loadUsers();	//尝试加载用户数据,不存在返回空null
        if (users.isEmpty()) {
            initializeUsers();				//若为空则创建并初始化
        }
        showMainMenu();
        FileManager.saveUsers(users);		//结束前调用 saveUsers(users)
    }

    private static void initializeUsers() {
        users = new ArrayList<>();
        users.add(new User("111111", "111", 12000));
        users.add(new User("222223", "222", 24000));
        users.add(new User("333333", "333", 18500));
        users.add(new User("444444", "444", 15000));
        users.add(new User("555555", "555", 900));
        users.add(new User("666666", "666", 6300));
        users.add(new User("777777", "777", 7200));
        users.add(new User("888888", "888", 18100));
        users.add(new User("999999", "999", 9100));
        users.add(new User("100000", "100", 20000));

    }

标签:Java,users,用户,System,add,IO,println,new,String
From: https://www.cnblogs.com/reubenche/p/18340100

相关文章

  • 【用户案例】破局与超越:承德银行如何通过RPA重塑监管统计流程
    近年来,承德银行不断努力,力求在监管报表提交领域实现智能化转型。面对报表数据零散分布于多元业务系统、缺乏成熟数据仓库支持、以及依赖传统手工填报和自下而上的逐级上报流程等挑战,该行采取了一系列革新措施。这些措施包括:细致审视并强化报送流程中的薄弱点,深入剖析智能化报送障......
  • Enhancing Question Answering for Enterprise Knowledge Bases using Large Language
    本文是LLM系列文章,针对《EnhancingQuestionAnsweringforEnterpriseKnowledgeBasesusingLargeLanguageModels》的翻译。使用大型语言模型增强企业知识库的问答能力摘要1引言2相关工作3前言4方法5实验6结论摘要高效的知识管理在提高企业和组......
  • Hadoop:java使用HDFS API实现基本操作工具类
    1、引入库<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.hadoop</......
  • 磁盘IO性能分析
    一、IO性能分析1.1IO性能、顺序访问和随机访问如果去看硬盘厂商的性能报告,通常你会看到两个指标;一个是响应时间(ResponseTime);另一个叫作数据传输率(DataTransferRate),数据传输率也称吞吐率。1.1.1数据传输率我们先来看一看后面这个指标,数据传输率。我们现在常用的硬盘......
  • Java计算机毕业设计垃圾识别工具箱(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,生活垃圾产生量急剧增加,垃圾分类已成为城市管理和环境保护的重要议题。然而,当前垃圾分类的推广与实施面临诸多挑战,包括公众分类......
  • Java计算机毕业设计景区推荐系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,人们对旅游体验的需求日益多元化和个性化。然而,面对海量的旅游信息和复杂的旅行规划过程,游客往往感到无所适从,难以快速准确地找......
  • Java计算机毕业设计楼盘销售系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着房地产市场的蓬勃发展,楼盘销售作为房地产产业链中的关键环节,其效率与透明度直接影响着开发商的资金回笼速度、市场反应灵敏度以及消费者的购房体......
  • Java计算机毕业设计驾校学员科目二服务系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着汽车保有量的不断增加,驾驶技能已成为现代社会不可或缺的基本能力之一。驾校作为培养合格驾驶人的重要机构,其教学质量和服务水平直接影响到学员的......
  • Java毕业设计基于微信小程序的加油站加油管理系统 uniApp
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,加油服务系统被用户普遍使用,为方......
  • 使用 abortNavigation 阻止导航
    title:使用abortNavigation阻止导航date:2024/8/3updated:2024/8/3author:cmdragonexcerpt:摘要:在Nuxt3中,abortNavigation是一个辅助函数,用于路由中间件内阻止不符合条件的页面访问,实现权限控制、错误处理及动态重定向,提升用户体验和应用可靠性categories:前端开......