- 引入依赖
<!-- csv依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.7</version>
</dependency>
<!-- 上传工具依赖 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
- 创建csv工具类CsvImportUtil
上传文件方法(将multipartFile转换为file):
/**
* @return File 一般文件类型
* @Description 上传文件的文件类型
* @Param multipartFile
**/
public static File uploadFile(MultipartFile multipartFile) {
//获取自己要上传文件的路径(这个自己改动)
Path_entity path_entity= csvImportUtil.pathMapper.upload_path();
String PATH = path_entity.getCatalogue();
String path = PATH+"/"+multipartFile.getOriginalFilename();
log.info(path); //拿到最终上传路径
try {
// 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File file = new File(path);
// 此抽象路径名表示的文件或目录是否存在
if (!file.getParentFile().exists()) {
// 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
file.getParentFile().mkdirs();
}
// 转换为一般file 文件
multipartFile.transferTo(file);
return file;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
读取CSV文件的内容:
/**
* @return List<List<String>>
* @Description 读取CSV文件的内容(不含表头)
* @Param filePath 文件存储路径,colNum 列数
**/
public static List<List<String>> readCSV(String filePath, int colNum) {
BufferedReader bufferedReader = null;
InputStreamReader inputStreamReader = null;
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(filePath);
inputStreamReader = new InputStreamReader(fileInputStream, "GBK");
bufferedReader = new BufferedReader(inputStreamReader);
CSVParser parser = CSVFormat.DEFAULT.parse(bufferedReader);
// 表内容集合,外层 List为行的集合,内层 List为字段集合
List<List<String>> values = new ArrayList<>();
int rowIndex = 0;
// 读取文件每行内容
for (CSVRecord record : parser.getRecords()) {
// 跳过表头
if (rowIndex == 0) {
rowIndex++;
continue;
}
// 判断下角标是否越界
if (colNum > record.size()) {
// 返回空集合
return values;
}
// 每行的内容
List<String> value = new ArrayList<>();
for (int i = 0; i < colNum; i++) {
value.add(record.get(i));
}
values.add(value);
rowIndex++;
}
return values;
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
- 生成csv文件
public String CSV_file(HttpServletResponse response,String mindId) {
List<Map<String, Object>> dataList = null;
Mind mind = mindMapper.get_mind_id(mindId);// 查询到要导出的信息
//表头
String sTitle = "id,user,mindName,mindData,mindOptions";
String fName = "mind_";
String mapKey = "id,user,mindName,mindData,mindOptions";
dataList = new ArrayList<>();
Map<String, Object> map = null;
map = new HashMap<>();
map.put("id", mind.getMindId());
map.put("user",mind.getUser());
map.put("mindName", mind.getMindName());
String str=mind.getMindData();
String minddata=str;
//先判断字符里是否含有逗号
if(str.contains(",")){
//如果还有双引号,先将双引号转义,避免两边加了双引号后转义错误
if(str.contains("\"")){
minddata=str.replace("\"", "\"\"");
}
//将逗号转义
minddata="\""+minddata+"\"";
}
map.put("mindData",minddata);
map.put("mindOptions",mind.getMindOptions());
dataList.add(map);
try (final OutputStream os = response.getOutputStream()) {
ExportUtil.responseSetProperties(fName, response);
ExportUtil.doExport(dataList, sTitle, mapKey, os);
return null;
} catch (Exception e) {
log.error("生成csv文件失败", e);
}
return "生成csv文件失败";
}
- 读取csv文件
public Object CSV_file( MultipartFile file) {
// 使用CSV工具类,生成file文件
File csvFile = CsvImportUtil.uploadFile(file);
// 将文件内容解析,存入List容器,List<String>为每一行内容的集合,6为CSV文件每行的总列数
List<List<String>> lists = CsvImportUtil.readCSV(csvFile.getPath(), 5);
if(lists != null ){
List<String> list=lists.get(0);
Mind mind=new Mind();
mind.setMindId(list.get(0));
mind.setUser(list.get(1));
mind.setMindName(list.get(2));
mind.setMindData(list.get(3));
mind.setMindOptions(list.get(4));
csvFile.delete();
return mind;
}
return "打开文件失败";
}
2219

被折叠的 条评论
为什么被折叠?



