跟我学IO(Java IO的面试题一)

假如现在给你一个txt文件,该文件中存在学生基本信息,如:学生名称、性别和年龄。每行存放一个学生信息,每个元信息之间是有空格分割。然后将这些学生信息通过IO解析出来并且按照年龄从大到小进行排序,最后输出学生信息。

假如现在给你一个txt文件,该文件中存在学生基本信息,如:学生名称、性别和年龄。每行存放一个学生信息,每个元信息之间是有空格分割。然后将这些学生信息通过IO解析出来并且按照年龄从大到小进行排序,最后输出学生信息。

txt文件的内容(studentData.txt):

# 姓名 性别 年龄(使用空格分割)
张三 男 23
李四 男 25
王怡 女 27
赵燕 女 21

实现思路:

使用BufferedReader解析给定的txt文件,每次读取一行,然后将学生信息按照空格分解出来设置到Student对象,且将这个Student添加到List中,最后使用Collections的sort方法来排序。

实现代码:

package com.bug315.application;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class StudentInfo {
	private List<Student> studentList;
	
	public static void main(String[] args) {
		StudentInfo studentInfo = new StudentInfo();
		studentInfo.readStudentInfo("document/studentData.txt");
		studentInfo.comparator();
		studentInfo.print();
	}
	
	public void print() {
		for (Student stu : studentList) {
			System.out.println(stu);
		}
	}
	
	public void comparator() {
		Collections.sort(this.studentList, new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				return o1.getAge().compareTo(o2.getAge());
			}
		});
		// 翻转List
		Collections.reverse( this.studentList );
	}
	
	public void readStudentInfo(String filePath) {
		studentList = new ArrayList<Student>();
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(
			    new InputStreamReader(new FileInputStream(filePath)) );
			String line = "";
			while ( (line = reader.readLine()) != null ) {
				// #表示注释行
				if ( !line.startsWith("#") ) {
					String[] strs = line.split("\s+");
					if ( strs.length == 3 ) {
						Student stu = new Student();
						stu.setName( strs[0] );
						stu.setSex( strs[1] );
						try {
							stu.setAge( new Integer(strs[2]) );
						} catch(NumberFormatException number) {
							stu.setAge( new Integer("0") );
						}
						studentList.add(stu);
					} else {
						throw new RuntimeException("存在不正确的数据行");
					}
				}
			}
		} catch( Exception e ) {
			e.printStackTrace();
		} finally {
			if ( null != reader) {
				try {
					reader.close();
					reader = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} // 
	}
	
}

class Student {
	// 用户名
	private String name;
	// 性别
	private String sex;
	// 年龄
	private Integer age;
	
	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Integer getAge() {
		return age;
	}

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

	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
}

运行结果:

Student [name=王怡, sex=女, age=27]
Student [name=李四, sex=男, age=25]
Student [name=张三, sex=男, age=23]
Student [name=赵燕, sex=女, age=21]
锲而舍之,朽木不折;锲而不舍,金石可镂。——《荀子·劝学》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号