上传文件csv 导入功能
HTML代码:
<script> function uploadCsv() { $('#chooseCsvFile').click(); } function doUploadCsv() { $('#uploadCsvForm').submit(); } </script>
<input id="btnImport" type="button" onclick="uploadCsv();" value=" 导 入 CSV "> <form id="uploadCsvForm" class="hidden" action="${ctx!}/biz/client/imports${suffix}?type=0" method="post" enctype="multipart/form-data"> <input id="chooseCsvFile" type="file" name="csvFile" onchange="doUploadCsv();" /> </form>
工具类:
可以将csv Excel文件等转换成list集合。(此工具类无任何依赖)
package com.shengmu.resource.finance.util; import java.io.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by wangrenhui on 15/4/2. */ public class CSVParser { private File file; private List<List<String>> resultList = new ArrayList<List<String>>(); private static Pattern pattern = Pattern .compile(",?\"([^\"]*(\"{2}[^\"]*\"{2}[^\"]*)*)\",?"); public static void main(String[] args) { CSVParser parser = new CSVParser(CSVParser.class.getClassLoader().getResource("test.csv").getFile()); List<List<String>> list = parser.parse(); print(list); } public CSVParser(File file) { this.file = file; } public CSVParser(String filePath) { file = new File(filePath); } private static void print(List<List<String>> list) { for (int i = 0; i < list.size(); i++) System.out.println(list.get(i).toString() + " Length: " + list.get(i).size()); } public List<List<String>> parse() { try { BufferedReader br = getReader(); String line = ""; while ((line = br.readLine()) != null) { line = handleSpecial(line); String[] elements = line.split(","); revert(elements); store(elements); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return resultList; } /** * Revert to original ',' if contains '|', precondition is that each * original Field of the line doesn't contain this char * * @param elements */ private void revert(String[] elements) { for (int i = 0; i < elements.length; i++) elements[i] = elements[i].replace("|", ","); } private void store(String[] elements) { resultList.add(Arrays.asList(elements)); } private BufferedReader getReader() { BufferedReader br = null; try { //br = new BufferedReader(new InputStreamReader(new FileInputStream( // file), Charset.forName("GB18030")));// ISO-8859-1,GB18030 br = new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } return br; } /** * Handling special characters for each given line. * * @param inputLine * @return */ private String handleSpecial(String inputLine) { if (inputLine == null || inputLine.trim().length() == 0) return ""; Matcher m = getMatcher(inputLine); String after = ""; while (m.find()) { after = m.group(2); String before = after; System.out.println("Before: " + before); if (after.contains(",")) // use '|' to replace ',' for later splitting of each field of // the line,this '|' needs to be revert to ',' after the whole line being // split after = after.replace(',', '|'); if (after.contains("\"\"")) after = after.replace("\"\"", "\""); System.out.println("After:" + after); inputLine = inputLine.replace(before, after); } return inputLine; } private static Matcher getMatcher(String sequence) { return pattern.matcher(sequence); } }
action代码:
调用工具类。
public void imports() { UploadFile csvFile = getFile("csvFile");//因为用的是jfinal框架 直接获取页面传来的文件 File ff=csvFile.getFile(); //获取文件 CSVParser parser=new CSVParser(ff);//将文件传给工具类 List<List<String>> list = parser.parse();//调用, 解析之后返回list集合 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } }
文件里的内容如果有汉字解析后转换成list集合里汉字会变成乱码,, 还没解决 ╮(╯▽╰)╭

浙公网安备 33010602011771号