前言:示例只是做了一个最最基础的上传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();

MapcallLogInfo ;

Listlist = new ArrayList();

// 获取文件内容

list = getSource(bate);

// 获取文件表头

Listtitle = 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; icontent = 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 ListgetSource(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 ;

ListallString = 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(Mapm:list){

System.out.println("param1:"+m.get("param1")+";param2:"+m.get("param2")+"。");

}

}

}

}

}

html代码:

test上传:

示例文件

运行结果

在处理csv文件的时候容易出现编码上的问题,小伙伴们写代码的时候要多注意一下!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java上传csv错误信息_java处理csv文件上传示例详解相关推荐

  1. java类的定义的实例_Java中类的定义和初始化示例详解

    类的定义 类的定义格式 //创建类 class classname{ field ://成员属性/字段 method://方法 } class为定义类的关键字,classname为类的名字,{ }为类 ...

  2. java后台验证不能为空_java validation 后台参数验证的使用详解

    一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...

  3. java中的getnumber怎么用_java安全编码指南之:Number操作详解

    简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...

  4. java break 在if 中使用_java中使用国密SM4算法详解

    前言 上次总结了一下加密算法的分类(加密算法有集中形式,各有什么不同?),现在我们用java语言实现一下SM4:无线局域网标准的分组数据算法.对称加密,密钥长度和分组长度均为128位. ps:我们既可 ...

  5. java 找出重复的数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个list集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  6. java中的守护线的应用_JVM中的守护线程示例详解

    前言 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例 ...

  7. java flv转mp3_Java调用ffmpeg转换视频格式为flv的示例详解

    这篇文章主要介绍了 详解java调用ffmpeg转换视频格式为flv的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下 详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在L ...

  8. java与与短路与_Java中短路运算符与逻辑运算符示例详解

    1.逻辑运算符(部分) 符号 名称 && 短路与运算符 || 短路或运算符 & 与运算符 | 或运算符 对于理工科学习者来说,逻辑运算是较为基础的概念,通常会在大一的离散数学课 ...

  9. java中的23种设计模式_Java开发中的23种设计模式详解

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...

最新文章

  1. 无向图--邻接矩阵、连接矩阵、深度遍历、广度遍历、生成树
  2. 004 关于Java如何扫描指定package下所有的类
  3. JSON.parse与eval的区别
  4. KUDU--秒级查询的数据仓库
  5. Nginx + pserve + supervisord — The Pyramid Cookbook v0.2
  6. win 2003 联网
  7. .Net Aop(静态织入)框架 BSF.Aop
  8. TailwindCSS v3.0 正式发布!一大波新特性来袭!
  9. windows操作系统自带的端口TCP转发
  10. v4l2接口,结构图
  11. 关于如何在vs 2005中使用sa用户登录的问题(即在vs 2005中SQL 2005的深层使用)
  12. 郭天祥的10天学会51单片机_第一节
  13. php最新猜骰子精美ui源码,ThinkPHP全新UI猜猜乐H5游戏源码
  14. MATLAB基础篇——基本语法
  15. 史诗级Java入门教程,想成为初级程序员看他就够了
  16. windows各类密码搜集
  17. 无盘服务器文件管理,云图管家文档图纸管理软件
  18. 查找计算机里包含相关文字,windows7如何搜索包含关键字的文件_win7电脑文件怎么查关键字文件...
  19. iOS 自定义转场动画篇
  20. 关于在VMware上安装Android x86及FTP详细使用

热门文章

  1. C语言 BMP24位变单色,怎么将24位色BMP图片改为单色或16色?(2)
  2. OpenCV与图像处理学习三——线段、矩形、圆、椭圆、多边形的绘制以及文字的添加
  3. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 16丨市场分析 II【难度困难】​
  4. MySQL流浪记(七)—— MySQL删除表数据
  5. Linux 源码安装 Python3 和 pip3
  6. 生产者-消费者 BlockingQueue 运用示例
  7. 自己动手制作一门语言(1)波罗语
  8. wdnas群晖nas_西数WD NAS红盘 WD140EFFX 14TB HDD和 SA500 1TB SSD开箱拆解评测
  9. LwIP应用开发笔记之十:LwIP带操作系统基本移植
  10. processing创意图形代码_2020年外贸B2C店铺的黑色星期五创意营销想法(下)