基于IO流读取的 完成 用户登录,注册,修改,查看所有用户,删除功能

Controller


import java.util.Scanner;/*** 视图层* 完成用户登录,注册,修改,删除功能*/
public class Controller {/*** 字符输入*/private static Scanner scanner = new Scanner(System.in);/*** 业务处理层*/private static Service service = new Service();public static void main(String[] args) {boolean flag = true;while (flag) {try {System.out.println("---1.登录--2.注册---3.修改---4.删除---5.查看用户信息---6.退出");int number = scanner.nextInt();switch (number) {//1.登录case 1:service.longUser();break;//2.注册case 2:service.newUser();break;//3.修改case 3:service.updateUser();break;//4.删除case 4:service.deleteUser();break;//5.查看用户信息case 5:service.forEachUser();break;//6.退出case 6:flag = false;break;default:System.out.println("输入错误");break;}} catch (Exception e) {scanner = new Scanner(System.in);System.out.println("输入错误");}}System.out.println("----谢谢使用再见!----");}}

Service


import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import java.util.Scanner;class Service {private static final File file = new File("operate/src/operate418/silence/username.txt");private static final Properties properties = new Properties();private static final Scanner scanner = new Scanner(System.in);/*** 注册*/void newUser() throws IOException {listUser();//读取文件里的用户信息System.out.println("-----注册用户----");System.out.println("请输入用户名:");String username = scanner.nextLine();//这里判断是否有重复数据if (properties.containsKey(username)) {System.out.println("用户名:" + username + " 重复");return;}//输入两次密码,并判断是否一致String password = ifPassword();if (password == null) {System.out.println("两次输入的密码不一致");return;}//如果;一直,存储到数据文件properties.put(username, password);properties.store(new FileWriter(file), null);System.out.println("---注册成功----");}/*** 登录*/void longUser() {//获取用户信息listUser();User user = getUser();if (properties.containsKey(user.getUsername())) {String password = (String) properties.get(user.getUsername());if (user.getPassword().equals(password)) {System.out.println("----登录成功----");return;}}System.out.println("----用户名或密码错误,请重新输入----");}/*** 修改*/void updateUser() throws IOException {listUser();System.out.println("请输入用户名:");String username = scanner.nextLine();if (!properties.containsKey(username)) {System.out.println("----该用户不存在----");return;}//输入两次密码,并判断是否一致String password = ifPassword();if (password == null) {System.out.println("两次输入的密码不一致");return;}//判断密码是否正确,密码正确就存储if (!properties.get(username).equals(password)) {System.out.println("密码不正确,修改失败");return;}//密码正确,取新密码System.out.println("请输入新密码:");String newPassword = scanner.nextLine();//存储数据到文件,采用覆盖式存储properties.put(username, newPassword);properties.store(new FileWriter(file), null);}/*** 获取用户名和密码** @return User*/private static User getUser() {System.out.println("请输入用户名:");String username = scanner.nextLine();System.out.println("请输入密码:");String password = scanner.nextLine();return new User(username, password);}/*** @return 两次密码一致返回密码 不一致返回null*/private static String ifPassword() {System.out.println(" 请输入密码:");String password = scanner.nextLine();System.out.println("请确认密码:");String newPassword = scanner.nextLine();//这里判断两次密码是否一致if (password.equals(newPassword)) {return password;}return null;}/*** 遍历用户*/void forEachUser() {listUser();properties.forEach((key, value) -> System.out.println("用户名:" + key + "     密码:" + value));System.out.println("--------当前共有" + properties.size() + "个用户--------");}/*** 删除*/void deleteUser() throws IOException {//获取user对象listUser();User user = getUser();//判断是否存在这个用户if (properties.containsKey(user.getUsername())) {//如果用户名存在,判断密码是否正确String password = (String) properties.get(user.getUsername());if (password.equals(user.getPassword())) {//用户名和密码都正确 存储数据到文件,采用覆盖式存储properties.remove(user.getUsername());System.out.println(properties);properties.store(new FileWriter(file), null);System.out.println("删除用户:" + user.getUsername() + "成功");} else {System.out.println("用户名或密码错误");}} else {System.out.println("用户名或密码错误");}}/*** 从配置文件读取用户信息*/private void listUser() {//如果没有这个文件,不读取if (file.exists() && file.canRead()) {try (FileReader reader = new FileReader(file)) {properties.load(reader);return;} catch (IOException e) {e.printStackTrace();}}System.out.println("配置文件不存在,或不是可读的文件,请检查文件路径,程序退出!!!");System.exit(1);}
}

User


public class User {private String username;private String password;@Overridepublic String toString() {return "用户名:" + username + "  密码:" + password;}public User() {}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User(String username, String password) {this.username = username;this.password = password;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

* 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Scanner;/*** 完成随机点名案例;学生姓名都提前写在文件中;:…

IO流读取文件用户信息根据年龄排序后,写到文件

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.util.*;/*** IO流读取文件用户信息根据年龄排序后,写到文件*/ public class Operate1 {public static void main(String[] arg…

IO流配置文件,键值对Properties 的读取

import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Properties;/*** IO流配置文件,键值对Properties 的读取*/ public class Demo1 {private static final File file new File("ope…

使用对象操作流程,读写文件

import java.io.*;/*** 使用对象操作流程,读写文件*/ public class Demo1 {private static final File file new File("operate/src/operate419/demo/demo2/user.txt");static {if (file.exists() || !file.canRead()) {try {System.out.println("&…

jdk11 后用的指定编码格式,读取文件

import java.io.FileReader; import java.io.IOException; import java.nio.charset.Charset;/*** jdk11 后用的指定编码格式,读取文件*/ public class Demo2 {public static void main(String[] args) throws IOException {FileReader fileReader new FileReader(…

转换流指定编码读写文件

import java.io.*;/*** 转换流指定编码读写文件*/ public class Demo1 {public static void main(String[] args) throws IOException {FileInputStream fileInputStream new FileInputStream("C:\\Users\\Administrator\\Desktop\\coverage-error.log");InputStrea…

IO流的读写拷贝

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;/*** IO流的读写拷贝*/ public class Demo1 {public static void main(String[] args) throws IOException {//在D盘建一个文件夹,&#xff0c…

IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法

修改Tomcat安装目录》conf》server.xml 配置文件 Connector标签里: 加上 secret"TOMCAT_AJP_SECRET6567" “或者”加上secretRequired"" 这两个配置文件,只需要加一个,或者都加也可以

IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷

import java.io.*;/*** IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷* author silence*/ public class IoCopy {private static int count 0;/*** 需要拷贝的起始地“文件夹路径”*/private static final File START …

线程池创建

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/***线程池创建*/ public class Demo1 {public static void main(String[] args) {ThreadP…

多线程和单线程 打印数字到100000 的速度对比

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** author silence 多线程和单线程 打印数字到100000 的速度对比 */ public class Dem…

* IO流递归拷贝一个文件夹 按源文件夹格式拷贝

import java.io.*;/*** IO流递归拷贝一个文件夹 按源文件夹格式拷贝** author silence*/ public class IoCopy2 {private static int count 0;/*** 需要拷贝的起始地“文件夹路径”*/private static final File START new File("C:\\Users\\Administrator\\Desktop\\作…

图片查找

import java.io.*; import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; import java.util.HashMap; import java.util.Properties;/*** 读取一个图片MD5,和文件夹里的所有…

Callable创建多线程

import java.util.concurrent.Callable;/*** author silence* Callable创建多线程* 创件一个类&#xff0c;实现 Callable 《》 这里填返回值类型* 重写call 方法。*/ public class MyCallable implements Callable<String> {Overridepublic String call() throws Exce…

继承Thread 创建多线程的简单实现

/*** 继承Thread 创建多线程的简单实现* author silence*/ public class MyThread extends Thread {Overridepublic void run() {for (int i 0; i < 100; i) {//打印当前线程对象名称System.out.print(getName() "----");System.out.println(i);}} } /** auth…

实现Runnable 创建多线程的简单实现

/*** 实现Runnable 创建多线程的简单实现** author silence*/ public class MyRunnable implements Runnable {Overridepublic void run() {for (int i 0; i < 100; i) {//打印当前线程名System.out.print(Thread.currentThread().getName() " ");System.out.p…

lambda表达式创建一条最简单的线程

/*** author silence*/ public class Demo1 {public static void main(String[] args) {new Thread(() -> {//打印线程名for (int i 0; i < 100; i) {System.out.println(Thread.currentThread().getName() " " i);}}).start();new Thread(() -> {//…

初学多线程使用中踩过的坑

wait使用&#xff0c;外面没有加synchronized &#xff0c;导致频繁报错。 IllegalMonitorStateException - 如果当前线程不是对象监视器的所有者报异常。 wait使用时会释放锁。并且使当前线程休眠&#xff0c;所以如果没有在synchronized 里面&#xff0c;没有获得锁。就会报错…

多线程线程池的基本创建,使用方法

import java.util.concurrent.*;/*** 多线程线程池的基本创建&#xff0c;使用方法** author silence*/ public class Silence {public static void main(String[] args) {//创建一个线程池 最大线程数量20 核心线程15//如果提交了超过15 不超过20的任务&#xff0c;会创建临时…

使用多线程拷贝文件夹

import java.io.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** 使用多线程拷贝文件夹* 不考虑目的地文件的唯一性。 不按源文件格…