IO流作业题

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}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值