将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中 读取D:\\StudentInfo.txt文件中的ArrayList对象(5)对Array

本文介绍了如何在Java中创建学生类,存储6个学员信息到ArrayList,将ArrayList写入和读取文件,并进行去重及按年龄排序,最后将排序结果写入新的文件。

1.需求

(1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法
(2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,将6个学员信息存入到ArrayList集合中(直接导入数据,懒得一个个输入)
(3)将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
(4)读取D:\\StudentInfo.txt文件中的ArrayList对象
(5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
(6)将ArrayList集合中排序后的结果利用PrintWriter流写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)

 2.代码演示

package Demo5;

import java.io.Serializable;
import java.util.Objects;

/**
 * @auther 黄磊
 * @2021/8/25 10:15
 **/
public class Student  {
    private String name;
    private String garder;
    private int age;

    public Student() {
    }

    public Student(String name, String garder, int age) {
        this.name = name;
        this.garder = garder;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
       
<think>嗯,用户想了解如何用Java IO流读取studentInfo.txt文件并将其转换为Student对象数组。我需要先理清楚步骤,确保每一步都正确。 首先,用户需要读取文本文件。Java中有多种IO流可以使用,比如FileReader、BufferedReader或者FileInputStream。考虑到字符流的方便性,可能用BufferedReader逐行读取会更高效。因为BufferedReader可以一次读取一行,处理起来比较方便。 接下来,用户的数据结构是Student对象数组。所以需要定义一个Student类,包含必要的属性和构造函数。例如,可能有id、name、age等字段。确保类有正确的构造方法和getter、setter。 然后,读取每一行数据后,需要解析字符串。假设文件中的每一行格式是固定的,比如用逗号分隔,例如“1,张三,20”。这时候需要用split方法分割字符串,得到各个字段的值。需要注意的是,如果字段中包含逗号或者其他特殊字符,可能需要转义处理,但这里可能先假设数据是规范的。 数据类型转换也是一个问题。比如,id和age是整数,所以需要将字符串转换为int类型。这时候要用Integer.parseInt()方法,但要处理可能的NumberFormatException异常。可能需要添加异常处理,或者假设数据是正确的。 将解析后的数据创建Student对象,并添加到列表中。使用ArrayList来动态添加,最后转换为数组。用户可能需要返回Student[]数组,所以最后用toArray方法转换。 IO流操作需要正确关闭资源,避免内存泄漏。在Java 7及以上,可以使用try-with-resources语句自动关闭资源,这样更安全。 然后,给出一个示例代码。包括Student类的定义,读取文件的方法,解析每一行,处理异常,最后转换为数组。需要确保代码语法正确,比如使用BufferedReader、FileReader,处理IOException,以及正确的类型转换。 同时,要考虑到可能的异常情况,比如文件不存在,或者数据格式错误,这时候需要捕获异常,并给出提示。但示例代码可能先不处理这些,或者简单抛出异常。 最后,生成相关问题,比如如何处理大文件、其他数据格式、异常处理,或者使用不同的流方式。这些问题可以帮助用户进一步学习相关的知识。 现在需要检查引用是否相关。用户提供的引用中,引用[1]提到字符数组流和字符串流,可能与读取数据有关。引用[2]关于数组遍历,可能和转换为数组相关。引用[3]和[4]涉及文件流和日志配置,可能对代码示例有帮助。但示例中可能用BufferedReader而不是FileInputStream,所以需要确认。 总之,步骤是:定义Student类,使用BufferedReader读取文件,逐行解析,创建对象,收集到列表,转为数组,处理异常,关闭资源。然后给出代码示例和相关问题。</think>### 分步解答:通过IO流读取studentInfo.txt并转换为Student对象数组 #### 步骤1:定义Student类 ```java public class Student { private int id; private String name; private int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } // Getter方法省略(根据需求添加) @Override public String toString() { return "Student{id=" + id + ", name='" + name + "', age=" + age + "}"; } } ``` #### 步骤2:读取文件并转换 ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class StudentReader { public static Student[] readStudents(String filePath) throws IOException { List<Student> studentList = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); // 假设数据格式为:id,name,age if (parts.length == 3) { int id = Integer.parseInt(parts[0].trim()); String name = parts[1].trim(); int age = Integer.parseInt(parts[2].trim()); studentList.add(new Student(id, name, age)); } } } return studentList.toArray(new Student[0]); } } ``` #### 步骤3:调用示例 ```java public class Main { public static void main(String[] args) { try { Student[] students = StudentReader.readStudents("studentInfo.txt"); for (Student s : students) { System.out.println(s); } } catch (IOException e) { System.err.println("文件读取失败:" + e.getMessage()); } } } ``` ### 关键说明 1. **IO流选择**:使用`BufferedReader`提高读取效率,并通过`try-with-resources`确保资源自动关闭[^3] 2. **数据解析**:按行分割后解析字段,需处理可能的`NumberFormatException`(示例中省略) 3. **对象封装**:通过`List<Student>`动态存储对象,最终转为数组 4. **异常处理**:主程序中捕获`IOException`,避免程序崩溃 ### 文件格式要求 ``` 1,张三,20 2,李四,22 3,王五,19 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值