java處理csv文件上傳示例詳解
前言:示例只是做了一個(gè)最最基礎(chǔ)的上傳csv的示例,如果要引用到代碼中去,還需要根據(jù)自己的業(yè)務(wù)自行添加一些邏輯處理。
ReadCsvUtil工具類
package com.hanfengyeqiao.gjb.utils;import java.io.*;import java.util.*; /** * csv工具類 */public class ReadCsvUtil { private static final String FIX='uFEFF'; /** * 獲取csv文件內(nèi)容 * @return 對(duì)象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(); // 獲取文件內(nèi)容 list = getSource(bate); // 獲取文件表頭 List<String> title = Arrays.asList(list.get(0).split(',')); String customerName = title.get(0).trim(); String customerNo = title.get(1).trim(); // 頭部會(huì)帶有'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); // 循環(huán)內(nèi)容 for(int i = 0; i<list.size();i++){ List<String> content = Arrays.asList(list.get(i).split(',')); // 當(dāng)沒(méi)有添加額外參數(shù)時(shí) if(content!=null){callLogInfo = new HashMap();callLogInfo.put('param1',content.get(0));callLogInfo.put('param2',content.get(1));allString.add(callLogInfo); } } return allString; } /** * 讀文件數(shù)據(jù) */ 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 { //讀取到的內(nèi)容給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>
示例文件
運(yùn)行結(jié)果
在處理csv文件的時(shí)候容易出現(xiàn)編碼上的問(wèn)題,小伙伴們寫代碼的時(shí)候要多注意一下!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 使用EF Code First搭建簡(jiǎn)易ASP.NET MVC網(wǎng)站并允許數(shù)據(jù)庫(kù)遷移2. 使用PHP實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)可視化功能的示例詳解3. Python從文件中讀取數(shù)據(jù)的方法步驟4. XMLHTTP下載遠(yuǎn)程數(shù)據(jù)輸出到瀏覽器5. PHP擴(kuò)展類型及安裝方式解析6. Python pygame實(shí)現(xiàn)中國(guó)象棋單機(jī)版源碼7. 如何在瀏覽器端加密——使用Javascript加密解密8. PHP對(duì)文本數(shù)據(jù)庫(kù)的基本操作方法9. Vue父組件向子組件傳值以及data和props的區(qū)別詳解10. 基于JavaScript實(shí)現(xiàn)留言板功能
