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