- 实现输出如下格式的当前日期时间:
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);
}
- 类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");
}
}
- 交易明细文件内容如下例:
#客户号 姓名 所述机构号 性别 帐号 发生时间 发生额
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();
}
}