我正在尝试编写一种方法,该方法使用阅读器从纯文本文件(学生ID-学生姓名-学生姓氏)中读取学生详细信息,并创建并返回相应的新学生对象。 。 txt文件逐行包含详细信息。学生证在一行上,姓名将在下一行。
我正在尝试在readStudent()方法中执行此操作
class StudentInputStream{
BufferedReader in;
public StudentInputStream(InputStream input) {
in = new BufferedReader(new InputStreamReader(input));
}
@Override
public void close() throws IOException {
in.close();
}
public Student readStudent() throws IOException {
/*Student student1 = new student();*/
return null;
}
}
答案 0 :(得分:1)
代码是不言自明的,如果您有任何疑问,请告诉我。
File file = new File("Your file's path");
Scanner sc=null;
try {
sc = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ArrayList<Student> list = new ArrayList<>();
while(sc.hasNextLine()){
if(sc.nextLine().equalsIgnoreCase("student")){
//Assuming each property is in the seperate line of file
String id,name,surname=null;
if(sc.hasNextLine()){
id = sc.nextLine();
/*if id is int use
* int id = Integer.parseInt(sc.nextLine());
*/
}
if(sc.hasNextLine()){
name = sc.nextLine();
}
if(sc.hasNextLine()){
surname = sc.nextLine();
}
list.add(new Student(id,name,surname));
}
}
使用bufferedReader:
InputStream in = new FileInputStream("Your file's path");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String str;
ArrayList<Student> list = new ArrayList<>();
while((str=br.readLine())!=null){
if(str.equalsIgnoreCase("student")){
String id=null,name=null,surname=null;
if((str=br.readLine())!=null){
id = str;
/*if id is int use
* int id = Integer.parseInt(sc.nextLine());
*/
}
if((str=br.readLine())!=null){
name = str;
}
if((str=br.readLine())!=null){
surname = str;
}
list.add(new Student(id,name,surname));
}
}
使用ObjectInputStream
OutputStream out = new FileOutputStream("yourfilepath.bin");
ObjectOutputStream outputStream = new ObjectOutputStream(out);
Student s1 = new Student("100383", "JOHN", "MITCHELL");
Student s2 = new Student("100346", "AMY", "CHING");
outputStream.writeObject(s1);
outputStream.writeObject(s2);
outputStream.writeObject(null);//to realize that you reach the end of file
outputStream.close();
out.close();
InputStream in = new FileInputStream("yourfilepath.bin");
ObjectInputStream inputStream = new ObjectInputStream(in);
Student temp = null;
while((temp =(Student)inputStream.readObject())!=null){
System.out.println(temp.id+","+temp.name+","+temp.surname);
}
输出
100383,约翰·米切尔
100346,AMY,CHING