上传文件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集合里汉字会变成乱码,,   还没解决 ╮(╯▽╰)╭

 

posted @ 2015-04-16 14:49  Smile_灰太狼  阅读(946)  评论(0)    收藏  举报