首先导入javacsv.jar
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
public class CsvUtil {
private static final Logger logger = Logger.getLogger(CsvUtil.class.getName());
public static List<CsvInfo> csvUtil(String fileName, InputStream inputStream) {
List<CsvInfo> csvList=new ArrayList<>();
CsvInfo csv = null;
int exccseNum=0;
int erryNum=0;
int allNum=0;
CsvReader r;
try {
//在这里你可以使用数据流或者文件路径,因为我是导入,所以使用的流
r = new CsvReader(inputStream, ',', Charset.forName("UTF-8"));
if(r==null){
throw new Exception("~~~~~~~~~you give me a null");
}
// 读取表头
r.readHeaders();
// 逐条读取记录,直至读完
while (r.readRecord()) {
//因为要求是#隔开的算俩条,所以使用split解析为数组
String adId = r.get(0);
String[] asIds = adId.split("#");
String bomId = r.get(1);
String[] bomIds = bomId.split("#");
String adName = r.get(2);
String[] asNames = adName.split("#");
String bomName = r.get(3);
String[] bomNames = bomName.split("#");
if (asIds.length > 1 && asNames.length > 1 && bomIds.length > 0 && bomNames.length > 0) {
for (int i = 0; i < asIds.length; i++) {
csv = newCsvInfo(asIds[i], asNames[i], bomIds[0], bomNames[0]);
csvList.add(csv);
exccseNum++;
allNum++;
}
} else if (asIds.length > 0 && asNames.length > 0 && bomIds.length > 1 && bomNames.length > 1) {
for (int i = 0; i < bomIds.length; i++) {
csv = newCsvInfo(asIds[0], asNames[0], bomIds[i], bomNames[i]);
csvList.add(csv);
exccseNum++;
allNum++;
}
} else if (asIds.length == 1 && asNames.length == 1 && bomIds.length == 1 && bomNames.length == 1) {
csv = newCsvInfo(asIds[0], asNames[0], bomIds[0], bomNames[0]);
csvList.add(csv);
exccseNum++;
allNum++;
}else {
erryNum++;
allNum++;
continue;
}
}
logger.info("~~~~~~~总共导入次数="+allNum+"~~~~~~成功导入次数="+exccseNum+"~~~~~~失败导入次数="+erryNum);
r.close();
} catch (Exception e) {
logger.error("导入失败", e);
} finally {
return csvList;
}
}
private static CsvInfo newCsvInfo(String dsmDeptId, String dsmDeptName, String ssoDeptId, String ssoDeptName) {
CsvInfo csv = new CsvInfo();
csv.setDsmDeptId(dsmDeptId);
csv.setDsmDeptName(dsmDeptName);
csv.setSsoDeptId(ssoDeptId);
csv.setSsoDeptName(ssoDeptName);
return csv;
}
}