2021-09-17 OOS,BW,BR三个编程

本文档展示了如何使用Java编程创建User类,包含name、pwd、age和desc属性,实现序列化存储到文件。用户需输入相关信息并进行格式验证,文件名以用户名+.obj命名。此外,还提供了反序列化所有.obj文件并输出用户信息的方法。最后,通过流连接实现了GBK编码写入和UTF-8编码读写的文件操作示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

12.设计一个类:User
 里面有四个属性:String name,String pwd,int age,String desc(人员描述)
 定义get,set方法以及toString方法和构造方法
 当前程序启动后要求用户顺序输入以上四个信息
 然后实例化一个User对象保存这四个信息并将该对象序列化到文件中。 注意:desc属性的值不需要写入文件
 文件名的命名规则:用户名.obj
比如该用户输入用户名为张三,那么这个对象序列化后的文件名为:张三.obj
 在用户输入信息后做必要的格式验证,比如4个信息是否都输入内容了。不能有空的。用户名只能包含字母数字下划线,并且1-32位

main方法:

    public static void main(String[] args) throws Exception {
        System.out.println("11题:");
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入账号:");
        String name = sc.next();
        while (true) {
            if (name.matches("[0-9a-zA-Z_]{1,32}")) {
                break;
            } else {
                System.out.print("格式错误!重新输入:");
                name = sc.next();
            }
        }
        System.out.print("请输入密码:");
        String pwd = sc.next();
        System.out.print("请输入年龄:");
        int age = sc.nextInt();
        System.out.print("请输入描述:");
        String desc = sc.next();
        User user = new User(name,pwd,age,desc);
        System.out.println(user);
        FileOutputStream fos = new FileOutputStream("./src/TXT/"+name+".obj");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(user);
        System.out.println("12题:");
}

User类:不重要很常规:

class User implements Serializable{
    private String name;
    private String pwd;
    private int age;
    private transient String desc;

    public User() {
    }

    public User(String name, String pwd, int age, String desc) {
        this.name = name;
        this.pwd = pwd;
        this.age = age;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "User{" +"name='" + name + '\'' +", pwd='" + pwd + '\'' +
                ", age=" + age +", desc='" + desc + '\'' +'}';
    }
}

13.将当前目录下的所有obj文件获取到,并进行反序列化后输出每个用户的信息(直接输出反序列化后的User对象即可)

在上题的main基础上,放后面:

        FileInputStream fis = new FileInputStream("./src/TXT/"+name+".obj");
        ObjectInputStream ois = new ObjectInputStream(fis);
        user = (User) ois.readObject();
        System.out.println(user);

14.使用流连接完成下面功能:
(1)在当前目录下准备好一个test.txt的文本文件,将用户从控制台输入的内容按行写入文件中,要求使用GBK编码。
  如:io_test.txt
  窗前明月光
  疑是地上霜
  举头望明月
  低头思故乡

    public static void method1()throws Exception {
        FileOutputStream fos = new FileOutputStream("./src/TXT/haha.txt",true);
        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(fos,"GBK")),true);
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.print("请输入内容:");
            String str = sc.next();
            if(str.equals("exit")){
                System.out.println("输出结束!");
                break;
            }
            pw.println(str);
        }
    }


(2)读入这个文本文件,按照行的顺序,以UTF-8编码方式,写到test2.txt文件中。
例:io_test2.txt
  低头思故乡
  举头望明月
  疑是地上霜
  窗前明月光

    public static void method2()throws Exception{
        FileInputStream fis = new FileInputStream("./src/TXT/haha.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fis,"GBK"));
        FileOutputStream fos = new FileOutputStream("./src/TXT/haha2.txt",true);
        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(fos,"UTF-8")),true);
        String str ;
        while ((str=br.readLine()) != null){
            System.out.println(str);
            pw.println(str);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值