前提文件字段需要和数据库表的字段对应 并且数据库表的字段要和实体类的属性一一对应
public int couponDt() throws IOException {
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) ApplicationContextHelper.getBean("testSqlSessionFactory");
SqlSession session = sqlSessionFactory.openSession(false);
BufferedReader in = null;
FileInputStream fdr = null;
InputStreamReader is = null;
Map<String, Object> map = new HashMap<String,Object>();
long starttime = System.currentTimeMillis();
try {
String path = "文件的路径";
File upFile = new File(path);
if(!upFile.exists()){
logger.error("文件不存在!");
throw new IOException("文件不存在");
}
fdr = new FileInputStream(upFile);
is = new InputStreamReader(fdr,"GBK"); //注意装载的时候需要用GBK
in = new BufferedReader(is, 30 * 1024 * 1024);//50M缓存
String line = "";
String everyLine = "";
int count = 0;
List<User> userls = new ArrayList();
while ((line = in.readLine()) != null) {
count++;
everyLine = line;
if (everyLine.contains("||")) {
everyLine = everyLine.replace("|| ", "||")+"|| ||&";
}else{
continue;
}
//根据文件格式来,这里分隔符是|| 所以需要转义
String users[] = everyLine.split("\\|\\|");
User user= new User ();
Field[] fields= User.class.getDeclaredFields();
int i = 0;
for(Field field : fields ) {
String objName = field.getName();
Field f = user.getClass().getDeclaredField(objName);
f.setAccessible(true);
if("java.math.BigDecimal".equals(f.getAnnotatedType().getType().getTypeName())){
f.set(user,getBigDec(users[i].trim()));
}else {
f.set(user,users[i].trim());
}
i++;
if(i==44)break;// 文件仅44个字段,
}
//从文件路径中取商户号
userls.add(user);
if(count%1000==0){
map.put("list",userls);
session.insert("***.insertAll",map);
userls.clear();
map.clear();
}
}
if(userls.size()>0){
map.put("list",userls);
session.insert("***.insertAll",map);
}
session.commit();
logger.info(upFile.getName()+"装载["+count+"]条数据,耗时:"+(System.currentTimeMillis()-starttime));
}catch (Exception e){
logger.info("装载出错",e);
}finally {
if(in!=null){
in.close();
}
if (fdr!=null){
fdr.close();
}
if (is!=null){
is.close();
}
if (null!=session)
session.close();
}
return 0;
}
public BigDecimal getBigDec(String strBigDec) throws Exception {
BigDecimal bide = new BigDecimal("0.00");
if(!"".equals(strBigDec)){
try{
bide = new BigDecimal(strBigDec);
}catch (Exception e){
logger.error(strBigDec+"转换BigDecimal错误:",e);
throw new Exception("装载时:"+strBigDec+"转换BigDecimal异常,抛出运行时异常");
}
}else{
bide = null;
}
return bide;
}