CSV读写工具方法
自定义读取csv文件
@param String file:文件地址
public static ArrayList<List<String>> readCSVList(String file){
ArrayList<List<String>> list = new ArrayList();
CsvReader reader = null;
try{
// 初始化CsvReader并指定列分隔符和字符编码
reader = new CsvReader(file, ',', Charset.forName("UTF-8"));
while (reader.readRecord()){
// 获取内容的两种方式
String[] str = reader.getValues();
System.out.println(str[0]);
List<String> strList = Arrays.asList(str);
System.out.println(strList.toString());
list.add(strList);
}
} catch (FileNotFoundException e){
logger.error("CSV文件未找到");
} catch (IOException e){
logger.error("写入CSV文件数据异常");
}
finally{
if (reader != null){
reader.close();
}
}
return list;
}
自定义写入csv文件
@param List<String[]> content:数据list
@param String path:文件地址
public static void writeCsv(List<String[]> content, String path) {
CsvWriter writer = null;
try {
writer = new CsvWriter(path, ',', Charset.forName("GBK"));
if(content != null && content.size() != 0) {
for(String[] strArray : content) {
writer.writeRecord(strArray);
}
}else{
logger.error("写入csv的文件为空。写入失败!");
}
} catch (IOException e) {
logger.error(e.getMessage(), e);
} finally {
if(writer != null) {
writer.close();
}
}
}
将list对象转换为list数组,数组第一行为标题
因为写入csv文件的api为array,故将平常获取的对象转成array。获取的数据,用作写入CSV工具类参数。
@param String path:文件地址
public List<String[]> object2arr(List<T> list){
List<String[]> resultList = new ArrayList<>();
if(list==null||list.size()==0){
return null;
}
try {
T t = list.get(0);
Field[] fields = t.getClass().getDeclaredFields();
//去除默认数据中第一行为属性问题
// String[] headerArr = new String[fields.length];
// for(int i=0;i<fields.length;i++){
// String fieldName = fields[i].getName();
// headerArr[i] = fieldName;
// }
// resultList.add(headerArr);
for (int i = 0; i < list.size(); i++) {
String[] bodyArr = new String[fields.length];
T eachT = list.get(i);
Class<? extends Object> tClass = t.getClass();
for (int j = 0; j < fields.length; j++) {
String fieldName = fields[j].getName();
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Method method = tClass.getMethod(getMethodName,new Class[] {});
Object value = method.invoke(eachT, new Object[]{});
String textValue = null;
if (value instanceof Date) {
Date date1 = (Date) value;
SimpleDateFormat sdff = new SimpleDateFormat("yyyy-MM-dd");
textValue = sdff.format(date1);
} else if (value == null) {
textValue = "";
} else {
textValue = value.toString();
}
bodyArr[j] = textValue;
}
resultList.add(bodyArr);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resultList;
}