上传文件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集合里汉字会变成乱码,, 还没解决 ╮(╯▽╰)╭
上传文件csv 导入功能的更多相关文章
- JS上传文件、导入文件
//开始导入 function Import() { var filepath = $('#txtUpload').val(); //校验是否选择表格 if (filepath == '') { $( ...
- java实现sftp客户端上传文件夹的功能
使用的jar: <dependencies> <dependency> <groupId>jsch</groupId> <artifactId&g ...
- springmvc+ajaxFileUpload上传文件(前后台彻底分离的情况下)
首先是导入jar包: web.xml: <servlet> <servlet-name>mvc-dispatcher</servlet-name> <serv ...
- HTTP上传 文件上传 图片上传 HTTP上传原理 文件上传原理 图片上传原理
1.概述 在最初的http协议中,没有上传文件方面的功能.rfc1867(http://www.ietf.org/rfc/rfc1867.txt )为http协议添加了这个功能.浏览器按照此规范将用户 ...
- 上传文件multipart form-data boundary 说明
含义 ENCTYPE="multipart/form-data" 说明: 通过 http 协议上传文件 rfc1867协议概述,客户端发送内容构造. 概述 ...
- http 协议上传文件multipart form-data boundary 说明--转载
原文地址:http://xixinfei.iteye.com/blog/2002017 含义 ENCTYPE="multipart/form-data" 说明: 通过 http 协 ...
- mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1
数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+EasyUI的特点,并结合文件上传控件,实现文 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)
目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能---- ...
随机推荐
- tornado解析 第一篇
一.tornado介绍 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 we ...
- C#多线程学习之:Monitor类
关于对C#多线程类Monitor的理解 1.对线程的理解 围绕着锁周围的线程可以分为以下三类: l 拥有锁的线程:只有一个 l 就绪队列:只有就绪队列里的线程才有机会在锁被释放时去获取锁. l ...
- java web数据库连接封装-simple
package cn.cslg.bm.web.util; import java.sql.Connection; import java.sql.DriverManager; import org.a ...
- .NET自带泛型委托方法Func、Action和Predicate
Func.Action和Predicate是.NET自带的3个泛型委托方法,三个方法的区别其实并不大,要强行给混着用也是可以的,但是我们是有追求的人,把道理讲清楚总是好的. 一.Func是有返回值的方 ...
- strspn() 和 strcspn() 函数【转】
本文转载自:https://flyer103.wordpress.com/2011/06/03/strspn-%E5%92%8C-strcspn-%E5%87%BD%E6%95%B0/ 前几天在看一本 ...
- CCNA 课程 六
路由协议概述: 通过一种路由协议学习到了多个去往同一目标网络的路由,metric小的放入路由表中.metric一样,同时放进路由表. 通过多种路由协议学习到了去往同一目标网络的路由,路由协议管理距离小 ...
- PHP(Zend Studio)入门视频
视频地址: http://www.ev-get.com/article/2014/5/9/20962.html (去掉地址中的减号-:可以看视频) Zend Studio教学视频之Zend Studi ...
- Flume架构及运行机制
flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...
- linux命令:mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- UOJ222 【NOI2016】区间
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...