记得复习

  1. 实现输出如下格式的当前日期时间:
    2006-07-25 09:00:05 355
方法:
    public static String currentDateTime();

   //实现
		public static void main(String[] args) {
			String time=currentDateTime();
			System.out.println(time);
		}
	
		public static String currentDateTime() {
			Date  d=new Date();
			
			SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss S");
			return df.format(d);
		}
  1. 类FileUtil 提供了常见的文件操作函数,如读取文件内容到byte[]、将byte[]存到指定文件名等:
    public class FileUtil{
    public static byte[] loadFileData(String fileName) throws IOException;
    public static void saveDataToFile(String fileName, byte[] data) throws IOException;
    }

saveDataToFile的参数fileName带路径 c:/a.txt

实现:
		public class FileUtil {
			  public static byte[] loadFileData(String fileName) throws IOException{
				  InputStream in=new FileInputStream(fileName);
				  byte [] buff=new byte[in.available()];
				  in.read(buff);
				  
				  in.close();
				  return buff;  
			  }
			  	  
			  public static void saveDataToFile(String fileName, byte[] data) throws IOException{
				  OutputStream out=new FileOutputStream(fileName);  
				  out.write(data);
				  out.close();
			  }
		}
		
		class Test{
			public static void main(String[] args) throws IOException {
				byte [] buff=FileUtil.loadFileData("c:/a.png");
				FileUtil.saveDataToFile("c:/a_copy.png",buff);
				
				System.out.println("ok");
			}
		}
  1. 交易明细文件内容如下例:

#客户号 姓名 所述机构号 性别 帐号 发生时间 发生额
000001|刘德华|0000|1|4155990188888888|20060720200005|300.00
000201|晓龙|0002|1|4155990199999999|20060720200005|500.00
000101|黄晓明|0012|1|4155990100000000|20060720200005|1000.50
000101|张东健|0012|1|4155990155555555|20060720200005|600.99
000301|梁朝伟|0013|0|4155990111111111|20060722201005|5000.00
000001|刘德华|0000|1|4155990188888888|20060725200005|200.00


一行是一条交易明细,每行分6列,列间用|分隔。#为注释符号。

类TransRecord存储一条明细(金额字段数据类型定为BigDecimal)。

解析文件数据至TransRecord[]。

实现如下功能:
public class TransRecordManager{
    /**
    * 记录数组
    */
    private TransRecord[] records;  //List<TransRecord> 

    /**
    * 加载数据
    * @param in - 数据流
    * @return
    * @throws - 解析过程中IO错误
    */
    public void load(InputStream in) throws IOException;
	

    /**
    * 加载数据
    * @param fileName - 包含记录数据的文件名
    * @return
    * @throws - 解析过程中IO错误
    */
    public void load(String fileName) throws IOException;

    /**
    * 取所有记录
    * @return 所有记录数组或null
    */
    public TransRecord[] getAll();

    /**
    * 按客户号查询记录
    * @param customerNumber - 客户号
    * @return 符合条件的记录数组或null
    */
    public TransRecord[] findByCustomerNumber(String customerNumber);

    /**
    * 按日期段查询记录
    * @param start - 开始日期
    * @param end - 结束日期
    * @return 符合条件的记录数组或null
    */
    public TransRecord[] findByDate(String start, String end);

    /**
    * 取得总金额
    * @return 总金额
    */
    public BigDecimal totalAmount();

    /**
    * 按金额排序
    * @return 按金额升序排序的结果
    */
    public TransRecord[] sortByAmount();

    /**
    * 打印  
    * @param out - 输出流
    */
    public void print(OutputStream out);

}
实现:
package com;
import java.io.*;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class TransRecordManager {
	public TransRecordManager() {
		records = new ArrayList<TransRecord>();
	}

	//底层集合
	private List<TransRecord> records;

	//加载数据到 records中
	public void load(InputStream in) throws Exception {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhssmm");

		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		br.readLine(); // 跳过第一行

		String str = null;
		while ((str = br.readLine()) != null) {
			String[] data = str.split("\\|");
			TransRecord lineData = new TransRecord();
			lineData.set客户号(data[0]);
			lineData.set姓名(data[1]);
			lineData.set所属机构号(data[2]);
			lineData.set性别(data[3]);
			lineData.set帐号(data[4]);
			lineData.set发生时间(df.parse(data[5])); // 要转成日期类型
			lineData.set发生额(new BigDecimal(data[6]));

			records.add(lineData);
		}
		
		br.close();
	}


	//加载数据
	public void load(String fileName) throws Exception {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhssmm");

		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
		br.readLine(); // 跳过第一行

		String str = null;
		while ((str = br.readLine()) != null) {
			String[] data = str.split("\\|");
			TransRecord lineData = new TransRecord();
			lineData.set客户号(data[0]);
			lineData.set姓名(data[1]);
			lineData.set所属机构号(data[2]);
			lineData.set性别(data[3]);
			lineData.set帐号(data[4]);
			lineData.set发生时间(df.parse(data[5])); // 要转成日期类型
			lineData.set发生额(new BigDecimal(data[6]));

			records.add(lineData);
		}

		br.close();
	}

    //取出所有记录
	public List<TransRecord> getAll() {
		return records;
	}


	//按客户号查询
	public List<TransRecord> findByCustomerNumber(String customerNumber) {
		List<TransRecord> list=new ArrayList<TransRecord>();
		for(TransRecord r:records) {
			if(r.get客户号().equals(customerNumber)) {
				list.add(r);
			}
		}
		
		return list;
	}


	//按日期段查询记录
	public  List<TransRecord> findByDate(String start, String end) throws ParseException {
		SimpleDateFormat df=new SimpleDateFormat("yyyyMMddhhmmss");
		
		Date d1=df.parse(start);
		Date d2=df.parse(end);

		List<TransRecord> list=new ArrayList<TransRecord>();
		for(TransRecord r:records) {
			long happenTime=r.get发生时间().getTime();
			
			if(happenTime>=d1.getTime()  &&  happenTime<=d2.getTime()) {
				list.add(r);
			}		
		}
		
		return list;
	}

	//统计总金额
	public BigDecimal totalAmount() {
		BigDecimal total=new BigDecimal(0);
		for(TransRecord r:records) {
			total=total.add(r.get发生额());
		}
		return total;
	}

    //按金额排序
	public  List<TransRecord>  sortByAmount() {
		List<TransRecord> newRecords=new ArrayList<TransRecord>();
		//新定义TreeSet集合  用lanmda形式传比较器
		TreeSet<TransRecord> t = new TreeSet<>((a, b) -> a.getMoney().subtract(b.getMoney()).intValue());
		
		//把数据复制到新的集合中
		for(TransRecord r:records) {
			newRecords.add(r);
		}
		
		Collections.sort(newRecords,new Comparator<TransRecord>() {
			public int compare(TransRecord o1, TransRecord o2) {
				if(o1.get发生额().doubleValue()>o2.get发生额().doubleValue()) {
					return 1;
				}
				else {
					return -1;
				}
			}
		});
		
	  return newRecords;
	}

	//打印
	public void print(OutputStream out) {
		PrintWriter pw=new PrintWriter(out,true);
		for(TransRecord r:records) {
		   String str=r.get姓名() +","+r.get客户号()+","+r.get帐号()+","+r.get性别()+","+r.get所属机构号()+","+r.get发生额()+","+r.get发生时间();
		   pw.println(str);
		}
		pw.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值