【技术】读取CSV文件排序后再输出

读取CSV文件排序后再输出

数据

员工姓名性别职级入职年月日工资
APG12018/2/155000
BPG22018/5/216000
CPG02018/3/124000
DPG32018/3/117000
EPG02018/3/124100

排序前数据
在这里插入图片描述

要求

按照一下要求排序:入职年月(降序) > 职级(降序) > 工资(降序)

代码

Person.java

package com.soft.pig;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Person implements Comparable<Person>{
	String name;
	String sex;
	Date birthday;
	String level;
	String selery;

	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 Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getLevel() {
		return level;
	}
	public void setLevel(String level) {
		this.level = level;
	}

	public String getSelery() {
		return selery;
	}
	public void setSelery(String selery) {
		this.selery = selery;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + ", birthday=" + new SimpleDateFormat("yyyy/MM/dd").format(birthday) + ", level=" + level + ", selery="
				+ selery + "]";
	}

	/**
	 * 这段代码是排序核心代码
	 * 参数对象o在前是降序
	 * 参数对象o在后是升序
	 */
	@Override
	public int compareTo(Person o) {
		// 入职时间
		if(!o.getBirthday().equals(getBirthday())) {
			return o.getBirthday().compareTo(getBirthday());
		// 职级
		} else if(!o.getLevel().equals(getLevel())) {
			return o.getLevel().compareTo(getLevel());
		// 工资
		} else {
			return Integer.valueOf(o.getSelery()) - Integer.valueOf(getSelery());
		}
	}
}

测试

Test3.java

package com.soft.pig;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test3 {

	public void read() throws Exception{
		// 获取文件
		File file = new File("C:\\Users\\admin\\Desktop\\infor.csv") ;
		
		// 读取文件
		BufferedReader reader = new BufferedReader(new FileReader(file));
		
		// 单行内容
		String str = "";
		
		// 标题数组
		String[] title = null;
		
		// 存放Person的集合
		List<Person> list = null;
		// 是否是第一行(标题行)
		boolean l = true;
		
		// 每次读取一行
		while((str = reader.readLine()) != null) {
			String[] rs = str.split(",");
			
			// 因为有标题行,所以第一行直接跳过
			if(l) {
				// 存储标题
				title = rs;
				l = false;
				continue;
			}
			
			Person p = new Person();
			if(list == null) {
				list = new ArrayList<Person>();
			}
			
			list.add(p);
			
			// 封装数据
			p.setName(rs[0]);
			p.setSex(rs[1]);
			p.setLevel(rs[2]);
			p.setBirthday(new SimpleDateFormat("yyyy/MM/dd").parse(rs[3]));
			p.setSelery(rs[4]);
			
		}
		
		// 调用sort方法
		Collections.sort(list);
		
		// 写文件到D盘
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:/p.csv")));
		
		
		// 因为有标题,所以需要先写标题
		bw.write(title[0] + ",");
		bw.write(title[1] + ",");
		bw.write(title[2] + ",");
		bw.write(title[3] + ",");
		bw.write(title[4]);
		// 换行
		bw.newLine();
		
		// 遍历集合输入内容
		for(Person p : list) {
			bw.write(p.getName() + ",");
			bw.write(p.getSex() + ",");
			bw.write(p.getLevel() + ",");
			
			// 日期转字符
			bw.write(new SimpleDateFormat("yyyy/MM/dd").format(p.getBirthday()) + ",");
			bw.write(p.getSelery());
			bw.newLine();
		}
		
		// 关闭流
		bw.close();
		reader.close();
	}
	
	public static void main(String[] args) {
		try {
			// 懒省事儿直接new对象调用了
			new Test3().read();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值