/*首先D盘根目录下创建students.txt文件(没有D盘或其它特殊情况的同学可以选择在其它盘符下创建)。 接收控制台输入的学生信息实例化学生对象Student,将对象装入ArrayList<Student>集合中。使用对象流能够将集合写入students.txt文件,也要能从students.txt文件中反序列化得到集合,进而获得学生的信息。 完成复制students.txt功能。复制后的文件与students.txt放在相同目录下,名为students拷贝.txt。(二)首先D盘根目录下创建students.txt文件(没有D盘或其它特殊情况的同学可以选择在其它盘符下创建)。 (三)接收控制台输入的学生信息实例化学生对象Student,将对象装入ArrayList<Student>集合中。使用对象流能够将集合写入students.txt文件,也要能从students.txt文件中反序列化得到集合,进而获得学生的信息。(四) 完成复制students.txt功能。复制后的文件与students.txt放在相同目录下,名为students拷贝.txt。我写的代码 为什么读取时只读取了第一次输入的数据啊 以后输入的读取不出来 拜托*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
Scanner sc=new Scanner(System.in);
FileOutputStream file=new FileOutputStream("students.txt");
while(true) {
System.out.println("请选择序号:1.向文件写入学生信息 2.读文件显示学生信息 3.退出");
int n=sc.nextInt();
List<Student> list=new ArrayList<>();
switch (n) {
case 1:
ObjectOutputStream oos=new ObjectOutputStream(file);
System.out.println("请输入学生的姓名,年龄和性别逗号分隔(例如:张三,12,男)");
String all=sc.next();
String arr[]=all.split(",");
String name=arr[0];
int age=Integer.parseInt(arr[1]);
String gender=arr[2];
list.add(new Student(name,age,gender));
oos.writeObject(list);
oos.flush();
if(oos!=null) {
oos.close();
}
break;
case 2:
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("students.txt"));
List<Student> list2=(List<Student>)ois.readObject();
for (Student student : list2) {
System.out.println(student);
}
break;
case 3:
ObjectInputStream newois=new ObjectInputStream(new FileInputStream("students.txt"));
ObjectOutputStream newoos=new ObjectOutputStream(new FileOutputStream("students拷贝.txt"));
newoos.writeObject(newois);
System.exit(0);
break;
default:
System.out.println("输入错误");
}
}
}
}
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file = new File("D:\\student.txt");
if(!file.exists()){//如果文件不存在,则新建文件
file.createNewFile();
}
Scanner sc=new Scanner(System.in);
List<Student> list=new ArrayList<>();//list移到while外面,不然每次都是新建一个list
while(true) {
System.out.println("请选择序号:1.向文件写入学生信息 2.读文件显示学生信息 3.退出");
int n = sc.nextInt();
switch(n) {
case 1:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\student.txt"));
System.out.println("请输入学生的姓名,年龄和性别逗号分隔(例如:张三,12,男)");
String all=sc.next();
String arr[]=all.split(",");
String name=arr[0];
int age=Integer.parseInt(arr[1]);
String gender=arr[2];
list.add(new Student(name,age,gender));
oos.writeObject(list);
oos.flush();
if(oos!=null) {
oos.close();
}
break;
case 2:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\student.txt"));
List<Student> list2 = (List<Student>) ois.readObject();
for (Student student : list2) {
System.out.println(student);
}
break;
case 3:
FileInputStream fis = new FileInputStream("D:\\student.txt");
FileOutputStream fos = new FileOutputStream("D:\\student拷贝.txt");
byte[] buffer = new byte[1024];
int num;
while((num = fis.read(buffer))!=-1) {//比较常用的读取字节方法
fos.write(buffer, 0, num);
}
if(fis!=null){
fis.close();//关闭流
}
if(fos!=null){
fos.close();//关闭流
}
System.exit(0);
break;
default:
System.out.println("输入错误");
break;
}
}
}
}
/**
* Student学生类
*/
class Student implements Serializable {
private static final long serialVersionUID = 970661418052057274L;
private String name;//姓名
private int age;//年龄
private String gender;//性别
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "姓名:" + name + ", 年龄:" + age + ", 性别:" + gender;
}
}
一次read只能读一个,read外面加一层while循环,case2判断 ois.readObject() != null
十分感谢