java上传csv文件上传_java处理csv文件上传示例详解
前言:示例只是做了一个最最基础的上传csv的示例,如果要引用到代码中去,还需要根据自己的业务自行添加一些逻辑处理。
readcsvutil工具类
package com.hanfengyeqiao.gjb.utils;
import java.io.*;
import java.util.*;
/**
* csv工具类
*/
public class readcsvutil {
private static final string fix="\ufeff";
/**
* 获取csv文件内容
* @return 对象list
*/
public static list> getresource(byte[] bate) throws ioexception {
list> allstring = new arraylist();
map callloginfo ;
list list = new arraylist();
// 获取文件内容
list = getsource(bate);
// 获取文件表头
list title = arrays.aslist(list.get(0).split(","));
string customername = title.get(0).trim();
string customerno = title.get(1).trim();
// 头部会带有"\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);
// 循环内容
for(int i = 0; i
list content = arrays.aslist(list.get(i).split(","));
// 当没有添加额外参数时
if(content!=null){
callloginfo = new hashmap();
callloginfo.put("param1",content.get(0));
callloginfo.put("param2",content.get(1));
allstring.add(callloginfo);
}
}
return allstring;
}
/**
* 读文件数据
*/
public static list 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 allstring = new arraylist<>();
try {
//读取到的内容给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> list=readcsvutil.getresource(bate);
if(list!=null){
for(map m:list){
system.out.println("param1:"+m.get("param1")+";param2:"+m.get("param2")+"。");
}
}
}
}
}
html代码:
test
上传:
示例文件
运行结果
在处理csv文件的时候容易出现编码上的问题,小伙伴们写代码的时候要多注意一下!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
java上传csv文件上传_java处理csv文件上传示例详解相关推荐
- java与与短路与_Java中短路运算符与逻辑运算符示例详解
1.逻辑运算符(部分) 符号 名称 && 短路与运算符 || 短路或运算符 & 与运算符 | 或运算符 对于理工科学习者来说,逻辑运算是较为基础的概念,通常会在大一的离散数学课 ...
- java类的定义的实例_Java中类的定义和初始化示例详解
类的定义 类的定义格式 //创建类 class classname{ field ://成员属性/字段 method://方法 } class为定义类的关键字,classname为类的名字,{ }为类 ...
- java去掉字符串中前后空格函数_JAVA中去掉字符串空格各种方法详解
1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 代码如下 复制代码 ...
- java+包装类,装箱和拆箱_Java包装类,装箱和拆箱详解
下面要给大家讲到的就是Java内置包装类方面的知识,这章主要会讲到Java包装类装箱和拆箱方面的知识,一起来了解一下. Java为每种基本数据类型分别设计了对应的类,这就被叫做是包装类(Wrapper ...
- java网络编程阻塞_Java网络编程由浅入深三 一文了解非阻塞通信的图文代码示例详解...
本文详细介绍组成非阻塞通信的几大类:Buffer.Channel.Selector.SelectionKey 非阻塞通信的流程ServerSocketChannel通过open方法获取ServerSo ...
- java 回溯_java 实现迷宫回溯算法示例详解
用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...
- java的继承实例_java教程之java继承示例详解
这篇文章主要介绍了java继承示例详解,需要的朋友可以参考下 什么是继承(extends)? 继承是:新定义的类是从已有的类中获取属性和方法的现象. 这个已有的类叫做父类, 从这个父类获取属性和方法的 ...
- 史上最易懂——ReactNative分组列表SectionList使用详情及示例详解
React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...
- 不愧是京东大牛!用Java实现黄金分割数的示例详解(附代码)
这篇文章主要介绍了java 实现黄金分割数的示例详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧. 黄金分割数 0.618 与美学有重要的关系.舞台上报幕员所站的位置大约就是舞台宽 ...
- Java多线程系列(九):CountDownLatch、Semaphore等4大并发工具类详解
之前谈过高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 ,以及高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 今天主要介绍concurre ...
最新文章
- javascript函数式_JavaScript中的函数式编程—结合实际示例(第1部分)
- equals方法重写详解
- jdk1.8 源码分析导图
- inventor2019有无CAE_Inventor2019最新下载_Inventor2019正式版 - 软件帝
- spss方差分析_交叉设计及SPSS多因素方差分析
- 2014 android 应用开发大赛,2014年全国高校移动互联网应用开发创新大赛
- [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序
- Python机器学习 集成算法实例
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_03 斗地主案例(单列)_1_斗地主案例的需求分析...
- linux拆分文件会影响源文件吗,linux split拆分文件
- php中的数据库操作和字符串操作session与cookie操作,PHP的cookie与session原理及用法详解...
- 西门子逻辑运算指令_西门子plc位逻辑运算指令
- java 微信公众平台 开源_Java微信公众号开发之开源框架推荐
- iOS多线程之GCD
- Android配置启动页
- pthread_cond_destroy死锁卡住问题处理记录
- 电脑拆机(华硕FL5900)+光驱改固态
- 试算平衡表示例图_案例十一试算平衡表
- 陌陌八成营收靠直播 直播行业已进入两极分化
- message: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryksbSBUwTCB6eHI3j;charse