1.模拟用户登录功能实现。
接收用户输入的用户名和密码,然后和文件中存储的用户名和密码匹配。
文件中存储的用户名和密码如下:
admin=admin123
zhangsan=zhangsan123
...
package io;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class HomeWork3 {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
// 提醒用户输入用户名
System.out.print("请输入用户名:");
String userName = in.next();
// 提醒用户输入密码
System.out.print("请输入用密码:");
String passWord = in.next();
BufferedReader file1 = null;
try {
// 创建字节输入流
file1 = new BufferedReader(new FileReader("D:\\src\\user.txt"));
String len = null;
while ((len = file1.readLine()) != null) {
// 判断文件找那个是否包含用户输入的用户名和密码
if (len.equals(userName + "=" + passWord)) {
System.out.println("登录成功!");
return;
}
}
System.out.println("对不起用户名或者密码输入错误!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (file1 != null) {
file1.close();
}
}
}
}
2.改进模拟用户登录功能实现。
文件存储的内容,直接存储一个用户集合对象。
package io;
import java.io.Serializable;
public class User implements Serializable {
private String userName;
private String passWord;
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;
}
@Override
public String toString() {
return "user [userName=" + userName + ","
+ " passWord=" + passWord + "]";
}
public User(String userName, String passWord) {
super();
this.userName = userName;
this.passWord = passWord;
}
public User() {
super();
}
}
package io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @author 张丙虎
* @date 2021-9-11
*/
public class HW {
public static void main(String[] args) throws IOException {
// 创建序列化
ObjectOutputStream oo = null;
ObjectInputStream oi = null;
try {
// 将集合对象序列化
oo = new ObjectOutputStream(new FileOutputStream("D:\\src\\users.txt"));
ArrayList<User> list1 = HW.cun();
oo.writeObject(list1);
// 提醒用户输入
System.out.print("请输入您的用户名:");
Scanner in = new Scanner(System.in);
String userName = in.next();
System.out.print("请输入您的密码:");
String passWord = in.next();
// 反序列化
oi = new ObjectInputStream(new FileInputStream("D:\\src\\users.txt"));
ArrayList<User> users = (ArrayList<User>) oi.readObject();
// 循环判断用户输入和存储文件中对象的用户名是否一样
for(User u : users) {
if((u.getUserName() + u.getPassWord()).equals(userName + passWord)) {
System.out.println("登录成功");
return;
}
}
System.out.println("登录失败!");
} catch (Exception e) {
e.printStackTrace();
}finally {
if(oi != null) {
oi.close();
}
if(oo != null) {
oo.close();
}
}
}
/**
* 用户对象存到集合
* @return 存储用户对象的集合
*/
public static ArrayList<User> cun() {
ArrayList<User> list = new ArrayList<>();
list.add(new User("zhangsan", "zhangsan"));
list.add(new User("lisi", "lisi124"));
list.add(new User("admin", "admin123"));
list.add(new User("maxuan", "maxuan"));
list.add(new User("wwwww", "wwwww"));
return list;
}
}
练习:序列化集合
当我们在文件中保存多个对象的时候,
可以把多个对象存储到一个集合中,
对集合进行序列化和反序列化。
分析:
1.定义一个存储Person对象的ArrayList集合
2.在ArrayList集合中存储Person对象
3.创建一个序列化流ObjectOutputStream对象
4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
5.创建一个反序列化OBjectInputStream对象
6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合
7.把Object类型的集合转换为ArrayList类型
8.遍历ArrayList集合
9.释放资源
package XuLieHua;
import java.io.Serializable;
/*
该类必须实现java.io.Serializable 接口,Serializable接口是一个标记接口,未实现此接口的类将无法使其任何状态序列化或反序列化。
会抛出NotSerializableException异常
*/
public class Person implements Serializable{
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
}
使用Person类:
package XuLieHua;
import java.io.*;
import java.util.ArrayList;
public class Demo01Text {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//1.定义一个存储Person对象的ArrayList集合
ArrayList<Person> list = new ArrayList<>();
//2.在ArrayList集合中存储Person对象
list.add(new Person("张三",18));
list.add(new Person("李四",20));
list.add(new Person("王五",22));
//3.创建一个序列化流ObjectOutputStream对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\Demo02\\src\\list.txt"));
//4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
oos.writeObject(list);
//5.创建一个反序列化OBjectInputStream对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("G:\\Demo02\\src\\list.txt"));
//6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合
Object o = ois.readObject();
//7.把Object类型的集合转换为ArrayList类型
ArrayList<Person> list2 = (ArrayList<Person>)o;
//8.遍历ArrayList集合
for (Person p : list2) {
System.out.println(p);
}
//9.释放资源
ois.close();
oos.close();
}
}
运行结果:
Person{name='张三', age=18}
Person{name='李四', age=20}
Person{name='王五', age=22}