前言:示例只是做了一個最最基礎的上傳csv的示例,如果要引用到代碼中去,還需要根據自己的業務自行添加一些邏輯處理。
ReadCsvUtil工具類
package com.hanfengyeqiao.gjb.utils;
import java.io.*;
import java.util.*;
/**
* csv工具類
*/
public class ReadCsvUtil {
private static final String FIX="\uFEFF";
/**
* 獲取csv文件內容
* @return 對象list
*/
public static List<Map<String,Object>> getResource(byte[] bate) throws IOException {
List<Map<String,Object>> allString = new ArrayList();
Map<String,Object> callLogInfo ;
List<String> list = new ArrayList();
// 獲取文件內容
list = getSource(bate);
// 獲取文件表頭
List<String> title = Arrays.asList(list.get(0).split(","));
String customerName = title.get(0).trim();
String customerNo = title.get(1).trim();
// 頭部會帶有"\uFEFF"值
if(customerName.startsWith(FIX)){
customerName = customerName.replace(FIX, "");
}
callLogInfo = new HashMap();
callLogInfo.put("param1",customerName);
callLogInfo.put("param2",customerNo);
allString.add(callLogInfo);
list.remove(0);
// 循環內容
for(int i = 0; i<list.size();i++){
List<String> content = Arrays.asList(list.get(i).split(","));
// 當沒有添加額外參數時
if(content!=null){
callLogInfo = new HashMap();
callLogInfo.put("param1",content.get(0));
callLogInfo.put("param2",content.get(1));
allString.add(callLogInfo);
}
}
return allString;
}
/**
* 讀文件數據
*/
public static List<String> getSource(byte[] bate) throws IOException {
BufferedReader br = null;
ByteArrayInputStream fis=null;
InputStreamReader isr = null;
try {
fis = new ByteArrayInputStream(bate);
//指定以UTF-8編碼讀入
isr = new InputStreamReader(fis,"UTF-8");
br = new BufferedReader(isr);
} catch (Exception e) {
e.printStackTrace();
}
String line;
String everyLine ;
List<String> allString = new ArrayList<>();
try {
//讀取到的內容給line變量
while ((line = br.readLine()) != null){
everyLine = line;
allString.add(everyLine);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fis != null){
fis.close();
}
if(isr != null){
isr.close();
}
}
return allString;
}
}
控制器(這里用的springboot):
package com.hanfengyeqiao.gjb.controller.admin;
import com.hanfengyeqiao.gjb.utils.ReadCsvUtil;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@Api(tags = "")
@RestController
@RequestMapping("/admin")
public class AdminCertController {
@RequestMapping("/test/upload")
public void upload(HttpServletRequest request, MultipartFile upfile) throws Exception {
if (request.getMethod().equals("POST")) {
byte[] bate =upfile.getBytes();
List<Map<String,Object>> list=ReadCsvUtil.getResource(bate);
if(list!=null){
for(Map<String,Object> m:list){
System.out.println("param1:"+m.get("param1")+";param2:"+m.get("param2")+"。");
}
}
}
}
}
html代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<form action="http://localhost:8088/admin/test/upload" method="post" enctype="multipart/form-data">
上傳:<input type="file" name="upfile"/>
<input type="submit" value="提交"/>
</form>
</body>
<script type="text/javascript">
</script>
</html>
示例文件

運行結果:

在處理csv文件的時候容易出現編碼上的問題,小伙伴們寫代碼的時候要多注意一下!!!
