小編給大家分享一下java如何實現(xiàn)CSV文件導(dǎo)入與導(dǎo)出功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
公司主營業(yè)務(wù):網(wǎng)站設(shè)計制作、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出睢陽免費做網(wǎng)站回饋大家。
導(dǎo)入導(dǎo)出功能很多時候用到的都是Excel文件,但是現(xiàn)在越來越多的使用了CSV文件進行此操作,它是一個純文本文件,可以用記事本打開,也可以用Excel打開。CSV文件不像Excel那樣有很多條條框框,它使用硬回車分割每條記錄,用逗號分隔每條數(shù)據(jù)的字段。
CSV格式的文件就是用硬回車和文本都好實現(xiàn)的表格,用Excel一讀就成了表格。文件名后綴就是 .csv。
直接上代碼吧!
導(dǎo)入部分
導(dǎo)入的時候基于Ajax請求,js代碼如下:
function importIpMac(upload) { var importTextInfo = document.getElementById("importTextInfo"); importTextInfo.value=""; $.ajaxFileUpload({ url: ctx + "/ipmac/importIpMac", type: 'post', secureuri: false, // 一般設(shè)置為false fileElementId: 'upload', // 上傳文件的id、name屬性名 dataType: 'text', // 返回值類型,一般設(shè)置為json、application/json success: function(data, status){ getIpMacBase(); }, error: function(data, status, e){ alert('請求異常!'); } }); }
Java代碼控制層:
/** * 導(dǎo)入 */ @ResponseBody @RequestMapping(value = "/importIpMac", method = RequestMethod.POST, headers = { "content-type=multipart/form-data" }) public int importIpMac(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "upload") MultipartFile[] buildInfo) throws ServletException, IOException { // 得到上傳文件的保存目錄,將上傳的文件存放于WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的安全 String savePath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload"); savePath = savePath.replace("file:", ""); // 去掉file: File file1 = new File(savePath); // 判斷上傳文件的保存目錄是否存在 if (!file1.exists() && !file1.isDirectory()) { log.info(savePath + "目錄不存在,需要創(chuàng)建"); file1.mkdir(); } // 刪除此路徑下的所有文件以及文件夾 delAllFile(savePath); try { InputStream is = buildInfo[0].getInputStream();// 多文件也適用,我這里就一個文件 byte[] b = new byte[(int) buildInfo[0].getSize()]; int read = 0; int i = 0; while ((read = is.read()) != -1) { b[i] = (byte) read; i++; } is.close(); String filePath = savePath + "/" + "temp" + "_" + buildInfo[0].getOriginalFilename(); log.info("臨時文件保存路徑:" + savePath + "/" + "temp" + "_" + buildInfo[0].getOriginalFilename()); OutputStream os = new FileOutputStream(new File(savePath + "/" + "temp" + "_" + buildInfo[0].getOriginalFilename()));// 文件原名,如a.txt os.write(b); os.flush(); os.close(); topologyIpMacPortRealService.importIpMac(filePath); } catch (Exception e) { if (log.isDebugEnabled()) log.debug("系統(tǒng)異常", e); } return 1; }
Java代碼實現(xiàn)層:
public int importIpMac(String filePath) throws Exception { // ListdataList=CSVUtils.importCsv(new File("/Users/wjm/Desktop/testexcel.csv")); List dataList = CSVUtils.importCsv(new File(filePath)); if (dataList != null && !dataList.isEmpty()) { for (int i = 1; i < dataList.size(); i++) { String data = dataList.get(i); SiTopologyIpMacPortBase base = new SiTopologyIpMacPortBase(); String[] source = data.split(","); if (source[0] != "") { base.setId(source[0]); base.setMac(source[1]); base.setIp(source[2]); base.setUpIp(source[3]); base.setUpName(source[4]); base.setUpIndex(source[5]); base.setModifyTime(source[6]); siTopologyIpMacPortBaseDao.insert(base); } } } return 1; }
其中CSVUtils類:
package com.one.si.toimpl.common.utils; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; /** * CSV操作(導(dǎo)出和導(dǎo)入) * * @author wjm * @version 1.0 Nov 24, 2015 4:30:58 PM */ public class CSVUtils { /** * 導(dǎo)出 * * @param file csv文件(路徑+文件名),csv文件不存在會自動創(chuàng)建 * @param dataList 數(shù)據(jù) * @return */ public static boolean exportCsv(File file, ListdataList){ boolean isSucess=false; FileOutputStream out=null; OutputStreamWriter osw=null; BufferedWriter bw=null; try { // OutputStreamWriter in_=new OutputStreamWriter(new FileOutputStream("文件名"), "gbk"); out = new FileOutputStream(file); osw = new OutputStreamWriter(out, "gbk"); bw =new BufferedWriter(osw); if(dataList!=null && !dataList.isEmpty()){ for(String data : dataList){ bw.append(data).append("\r"); } } isSucess=true; } catch (Exception e) { isSucess=false; }finally{ if(bw!=null){ try { bw.close(); bw=null; } catch (IOException e) { e.printStackTrace(); } } if(osw!=null){ try { osw.close(); osw=null; } catch (IOException e) { e.printStackTrace(); } } if(out!=null){ try { out.close(); out=null; } catch (IOException e) { e.printStackTrace(); } } } return isSucess; } /** * 導(dǎo)入 * * @param file csv文件(路徑+文件) * @return */ public static List importCsv(File file){ List dataList=new ArrayList (); BufferedReader br=null; try { br = new BufferedReader(new FileReader(file)); String line = ""; while ((line = br.readLine()) != null) { dataList.add(line); } }catch (Exception e) { }finally{ if(br!=null){ try { br.close(); br=null; } catch (IOException e) { e.printStackTrace(); } } } return dataList; } }
導(dǎo)出部分
js部分:
/* * 導(dǎo)出基準表中的數(shù)據(jù) */ function exportIpMac() { window.open("exportIpMac.do"); }
Java代碼控制層:
/** * 導(dǎo)出的基準表信息 */ @ResponseBody @RequestMapping("/exportIpMac") public String exportIpMac(HttpServletRequest request, HttpServletResponse response) throws Exception { ListdataList = topologyIpMacPortRealService.exportIpMac(); response.setCharacterEncoding("GBK"); SimpleDateFormat dfs = new SimpleDateFormat("yyyyMMddHHmmss");// 設(shè)置日期格式 Date time = new Date(); String tStamp = dfs.format(time); String filename = "IpMacPortExport"+tStamp + ".csv"; response.setHeader("contentType", "text/html; charset=GBK"); response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", "attachment; filename="+filename); String cp=request.getSession().getServletContext().getRealPath("/"); String path = cp+"download/"+filename; File file = new File(path); BufferedInputStream bis = null; BufferedOutputStream out = null; FileWriterWithEncoding fwwe =new FileWriterWithEncoding(file,"GBK"); BufferedWriter bw = new BufferedWriter(fwwe); if(dataList!=null && !dataList.isEmpty()){ for(String data : dataList){ bw.write(data); bw.write("\n"); } } bw.close(); fwwe.close(); try { bis = new BufferedInputStream(new FileInputStream(file)); out = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; while (true) { int bytesRead; if (-1 == (bytesRead = bis.read(buff, 0, buff.length))){ break; } out.write(buff, 0, bytesRead); } file.deleteOnExit(); } catch (IOException e) { throw e; } finally{ try { if(bis != null){ bis.close(); } if(out != null){ out.flush(); out.close(); } } catch (IOException e) { throw e; } } delAllFile(cp+"download/"); return null; }
Java代碼實現(xiàn)層:
public ListexportIpMac() throws Exception { List dataList = new ArrayList (); try { List list = siTopologyIpMacPortRealdao.selectAllData(); dataList.add("ID,地址,IP地址,設(shè)備,設(shè)備名稱,端口,更新時間"); for (int i = 0; i < list.size(); i++) { dataList.add(list.get(i).getId() + "," + list.get(i).getMac() + "," + list.get(i).getIp() + "," + list.get(i).getUpIp() + "," + list.get(i).getUpName() + "," + list.get(i).getUpIfIndex() + "," + list.get(i).getModifyTime()); } } catch (Exception e) { e.printStackTrace(); } return dataList; }
使用的是Chrome瀏覽器,下載的時候會直接在瀏覽器下面進行顯示下載。
以上是“java如何實現(xiàn)CSV文件導(dǎo)入與導(dǎo)出功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!