package xiao;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.HashMap;
import java.util.Set;
import java.util.ArrayList;
public class CsvUtil {
private BufferedReader bufferedreader = null;
private String msg = "";
private static int MAX_CONTACT_COUNT=1000;
private static String OUT_MAX_CONTACT_INFO="联系人数量超过1000条了!";
private static String NO_CONTACT_INFO="无联系人数据!";
private static String LOSTFORMAT_INFO="联系人信息的格式不对或者不全!\r\n请增加联系序号/机构联系人/电话/邮箱/传真!";
private static String ERRORFORMAT_INFO="联系人信息格式不正确!";
private static String DOUBLE_INFO="联系人序号重复";
private HashMap<String, ContactInfo> map = new HashMap<String, ContactInfo>();
public CsvUtil() {
super();
}
public boolean csvOpenWithReader( InputStreamReader reader) {
ArrayList<String> list = new ArrayList<String>();
bufferedreader = new BufferedReader(reader);
String stemp;
try {
while ((stemp = bufferedreader.readLine()) != null) {
if(stemp.trim().length()>0){
if(list.size()>this.MAX_CONTACT_COUNT){
addMsg(OUT_MAX_CONTACT_INFO);
return false;
}
else {
list.add(stemp);
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return patternCheck(list);
}
/*
* 严格校验联系人文件中的信息
* 如果联系人文件为空,则返回false,并提示无联系人信息
* 否则,继续校验
* 如果有一行联系人信息缺失,那么将提示本行联系人信息缺失
* 如果有一行联系人信息格式不对,那么将提示本行联系人信息格式不对
* 如果文件中有重复的联系人序号,那么将提示本行属于重复数据
* 符合要求的联系人信息将被分析出来,并放入map中。
*/
private boolean patternCheck(ArrayList<String> list) {
if(list.size()<=0) {
addMsg(NO_CONTACT_INFO);
return false;
}
boolean msgFlag=true;//默认所有的联系人信息均符合格式要求。
map.clear();
Iterator<String> it = list.iterator();
int i=1;
while(it.hasNext()){
String[] infos = it.next().trim().toString().split(",");
if(infos==null||!infoCheck(infos)){
addMsg("第"+i+"行"+LOSTFORMAT_INFO);
if(msgFlag) {
map.clear();
msgFlag &= false;
}
}
else {
ContactInfo info = new ContactInfo();
info.setContact_no(infos[0]);
info.setContact_person(infos[1]);
if( !(info.setContact_phone(infos[2])&&
info.setContact_email(infos[3])&&
info.setContact_fax(infos[4]))) {
addMsg("第"+i+"行"+ERRORFORMAT_INFO);
if(msgFlag) {
map.clear();
msgFlag &= false;
}
}
if(infos.length==6)
info.setContact_remark(infos[5]);
if(map.get(infos[0])!=null) {
addMsg("第"+i+"行"+DOUBLE_INFO);
if(msgFlag) {
map.clear();
msgFlag &= false;
}
}
else {
map.put(infos[0],info);
}
}
i++;
}
return msgFlag;
}
/*
* 检查联系人信息是否有:联系序号 联系人 联系电话 电子邮件 传真
*/
private boolean infoCheck(String[] infos) {
if(infos.length<5||infos.length>6)
return false;
for(int i=0; i<infos.length; i++) {
if(infos[i]==null||infos[i].trim().length()<=0)
return false;
}
return true;
}
public HashMap getMap() throws IOException {
return map;
}
public void csvClose() throws IOException {
this.bufferedreader.close();
}
public String getMsg() {
return msg;
}
public void addMsg(String msg) {
this.msg += msg+"\n";
}
}
- 1
- 2
前往页