关于读取txt文件到中的数据问题 纠结一下午
public class RechargeBatch extends BaseEntity {
private String batch; //批次编号
private String cardType; //充值卡类型编号
private String cardTheme; //充值卡类型说明
private Integer cardNumber; //充值卡数量
private String cardNoStart; //充值卡开始卡号
private String cardNoEnd; //充值卡结束卡号
private Date startDate; //充值卡开始使用日期
private Date stopDate; //充值卡结束使用日期
private Date reserveStopDate; //充值卡最终保留结束使用日期
private Integer faceValue; //充值卡面值
private Set<RechargeBatchInfo> rechargeBatchInfoSet; //充值卡明细项
//省略getset方法
}
数据流 String
public class RechargeBatchInfo extends BaseEntity {
private String cardNo; //充值卡号
private String cardPwd; //充值卡密
private String cardStatus; //充值卡状态
private RechargeBatch rechargeBatch; //充值卡批次
//省略getset方法
}
package com.tur.demo;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Hello {
public static void main(String[] args) {
RechargeBatch batch = null;
Set<RechargeBatchInfo> batchInfos = new HashSet<RechargeBatchInfo>();
Scanner scanner = new Scanner(ClassLoader.getSystemClassLoader().getResourceAsStream("data.txt"));
Pattern batchPattern = Pattern.compile("^(.+):=(.+)$");
Map<String, String> batchFields = new HashMap<String, String>();
while (scanner.hasNext()) {
String str = scanner.nextLine();
if (str.matches("^(.+):=(.+)$")) {
Matcher matcher = batchPattern.matcher(str);
while (matcher.find()) {
batchFields.put(matcher.group(1), matcher.group(2));
}
} else if (str.matches("^\\d+\\s.+$")) {
batchInfos.add(createRechargeBatchInfo(str));
}
}
batch = createRechargeBatch(batchFields);
batch.rechargeBatchInfoSet = batchInfos;
System.out.println(batchFields); // 输出取得的键值对,用于测试
}
public static RechargeBatch createRechargeBatch(Map<String, String> batchFields) {
RechargeBatch batch = new RechargeBatch();
batch.batch = batchFields.get("Batch");
batch.cardType = batchFields.get("CardType");
batch.cardTheme = batchFields.get("CardTheme");
batch.cardNumber = Integer.parseInt(batchFields.get("CardNumber"));
batch.cardNoStart = batchFields.get("StartCardNo");
// ...
return batch;
}
public static RechargeBatchInfo createRechargeBatchInfo(String str) {
RechargeBatchInfo info = new RechargeBatchInfo();
// 用0211001304380000001XXXXXXXXXXXXXXXXXX创建一个info的对象
return info;
}
}
class RechargeBatch {
// 改成public是因为上面好用
public String batch; //批次编号
public String cardType; //充值卡类型编号
public String cardTheme; //充值卡类型说明
public Integer cardNumber; //充值卡数量
public String cardNoStart; //充值卡开始卡号
public String cardNoEnd; //充值卡结束卡号
public Date startDate; //充值卡开始使用日期
public Date stopDate; //充值卡结束使用日期
public Date reserveStopDate; //充值卡最终保留结束使用日期
public Integer faceValue; //充值卡面值
public Set<RechargeBatchInfo> rechargeBatchInfoSet; //充值卡明细项
RechargeBatch() {
}
//省略getset方法
}
class RechargeBatchInfo {
private String cardNo; //充值卡号
private String cardPwd; //充值卡密
private String cardStatus; //充值卡状态
private RechargeBatch rechargeBatch; //充值卡批次
//省略getset方法
}
{CardNumber=250, Facevalue=500, Reservestopdate=20190630, Batch=130438, StopDate=20180630, StartDate=20130410, EndCardNo=0211001304380000250, CardTheme=充值付费卡, CardType=100, StartCardNo=0211001304380000001}
这个文件的存储还是很有规律的package com.test;
import java.io.DataInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 测试类
*
*/
public class Main {
private static Map<String, String> recharge = new HashMap<String, String>();// 存放[head]中的信息
private static Map<String, String> relation = new HashMap<String, String>();//存放[begin][end]中的信息
/**
* @param args
*/
public static void main(String[] args) {
parser();
System.out.println(recharge);
System.out.println(relation);
}
@SuppressWarnings("deprecation")
private static void parser() {
try {
InputStream is = Main.class.getResourceAsStream("test.ini");
DataInputStream dis = new DataInputStream(is);
String spilt = "";
while (dis.read() != -1) {
String value = dis.readLine();
if (value.equals("[HEAD]")) {// 判断数据开始
spilt = ":=";
} else if (value.equals("[BEGIN]")) {
spilt = " ";
}
saveData(value, spilt);// 保存数据到不同的集合中。
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 根据分隔符的不同进行不同数据的保存
*
* @param value
* @param spilt
*/
private static void saveData(String value, String spilt) {
String[] temp = value.split(spilt);
if (temp.length < 2) {
return;
}
if (spilt.equals(":=")) {
recharge.put(temp[0], temp[1]);
}
if (spilt.equals(" ")) {
relation.put(temp[0], temp[1]);
}
}
}