java实现CSV文件导入与导出功能

年前在开发功能模块的时候用到了CSV文件导入导出,就此整理一下,便于大家参考。

导入导出功能很多时候用到的都是Excel文件,但是现在越来越多的使用了CSV文件进行此操作,它是一个纯文本文件,可以用记事本打开,也可以用Excel打开。CSV文件不像Excel那样有很多条条框框,它使用硬回车分割每条记录,用逗号分隔每条数据的字段。

CSV格式的文件就是用硬回车和文本都好实现的表格,用Excel一读就成了表格。文件名后缀就是 .csv。

直接上代码吧!

导入部分

导入的时候基于Ajax请求,js代码如下:

function importIpMac(upload) {
 var importTextInfo = document.getElementById("importTextInfo");
 importTextInfo.value="";
 $.ajaxFileUpload({
   url: ctx + "/ipmac/importIpMac",
 type: 'post',
 secureuri: false,  // 一般设置为false
 fileElementId: 'upload',  // 上传文件的id、name属性名
 dataType: 'text',  // 返回值类型,一般设置为json、application/json
   success: function(data, status){
   getIpMacBase();
   },
   error: function(data, status, e){
   alert('请求异常!');
   }
 });
}

Java代码控制层:

 /**
 * 导入
 */
 @ResponseBody
 @RequestMapping(value = "/importIpMac", method = RequestMethod.POST, headers = { "content-type=multipart/form-data" })
 public int importIpMac(HttpServletRequest request,
  HttpServletResponse response,
  @RequestParam(value = "upload") MultipartFile[] buildInfo)
  throws ServletException, IOException {

 // 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
 String savePath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
 savePath = savePath.replace("file:", ""); // 去掉file:
 File file1 = new File(savePath);
 // 判断上传文件的保存目录是否存在
 if (!file1.exists() && !file1.isDirectory()) {
  log.info(savePath + "目录不存在,需要创建");
  file1.mkdir();
 }
 // 删除此路径下的所有文件以及文件夹
 delAllFile(savePath);

 try {
  InputStream is = buildInfo[0].getInputStream();// 多文件也适用,我这里就一个文件
  byte[] b = new byte[(int) buildInfo[0].getSize()];
  int read = 0;
  int i = 0;
  while ((read = is.read()) != -1) {
  b[i] = (byte) read;
  i++;
  }
  is.close();
  String filePath = savePath + "/" + "temp" + "_" + buildInfo[0].getOriginalFilename();
  log.info("临时文件保存路径:" + savePath + "/" + "temp" + "_" + buildInfo[0].getOriginalFilename());
  OutputStream os = new FileOutputStream(new File(savePath + "/" + "temp" + "_" + buildInfo[0].getOriginalFilename()));// 文件原名,如a.txt
  os.write(b);
  os.flush();
  os.close();
  topologyIpMacPortRealService.importIpMac(filePath);
 } catch (Exception e) {
  if (log.isDebugEnabled())
  log.debug("系统异常", e);
 }

 return 1;
 }

Java代码实现层:

 public int importIpMac(String filePath) throws Exception {
 // List<String> dataList=CSVUtils.importCsv(new File("/Users/wjm/Desktop/testexcel.csv"));
 List<String> dataList = CSVUtils.importCsv(new File(filePath));
 if (dataList != null && !dataList.isEmpty()) {
  for (int i = 1; i < dataList.size(); i++) {
  String data = dataList.get(i);
  SiTopologyIpMacPortBase base = new SiTopologyIpMacPortBase();
  String[] source = data.split(",");
  if (source[0] != "") {
   base.setId(source[0]);
   base.setMac(source[1]);
   base.setIp(source[2]);
   base.setUpIp(source[3]);
   base.setUpName(source[4]);
   base.setUpIndex(source[5]);
   base.setModifyTime(source[6]);

   siTopologyIpMacPortBaseDao.insert(base);
  }
  }
 }
 return 1;
 }

其中CSVUtils类:

package com.one.si.toimpl.common.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * CSV操作(导出和导入)
 *
 * @author wjm
 * @version 1.0 Nov 24, 2015 4:30:58 PM
 */
public class CSVUtils {

<span style="white-space:pre"> </span>/**
   * 导出
   *
   * @param file csv文件(路径+文件名),csv文件不存在会自动创建
   * @param dataList 数据
   * @return
   */
  public static boolean exportCsv(File file, List<String> dataList){
    boolean isSucess=false;

    FileOutputStream out=null;
    OutputStreamWriter osw=null;
    BufferedWriter bw=null;
    try {
//     OutputStreamWriter in_=new OutputStreamWriter(new FileOutputStream("文件名"), "gbk");
      out = new FileOutputStream(file);
      osw = new OutputStreamWriter(out, "gbk");
      bw =new BufferedWriter(osw);
      if(dataList!=null && !dataList.isEmpty()){
        for(String data : dataList){
          bw.append(data).append("\r");
        }
      }
      isSucess=true;
    } catch (Exception e) {
      isSucess=false;
    }finally{
      if(bw!=null){
        try {
          bw.close();
          bw=null;
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if(osw!=null){
        try {
          osw.close();
          osw=null;
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if(out!=null){
        try {
          out.close();
          out=null;
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }

    return isSucess;
  }

  /**
   * 导入
   *
   * @param file csv文件(路径+文件)
   * @return
   */
  public static List<String> importCsv(File file){
    List<String> dataList=new ArrayList<String>();

    BufferedReader br=null;
    try {
      br = new BufferedReader(new FileReader(file));
      String line = "";
      while ((line = br.readLine()) != null) {
        dataList.add(line);
      }
    }catch (Exception e) {
    }finally{
      if(br!=null){
        try {
          br.close();
          br=null;
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }

    return dataList;
  }
}

导出部分

js部分:

/*
 * 导出基准表中的数据
 */
function exportIpMac() {
 window.open("exportIpMac.do");
}

Java代码控制层:

 /**
 * 导出的基准表信息
 */
 @ResponseBody
 @RequestMapping("/exportIpMac")
 public String exportIpMac(HttpServletRequest request, HttpServletResponse response) throws Exception {
 List<String> dataList = topologyIpMacPortRealService.exportIpMac();
 response.setCharacterEncoding("GBK");
 SimpleDateFormat dfs = new SimpleDateFormat("yyyyMMddHHmmss");// 设置日期格式
 Date time = new Date();
 String tStamp = dfs.format(time);
 String filename = "IpMacPortExport"+tStamp + ".csv";
 response.setHeader("contentType", "text/html; charset=GBK");
 response.setContentType("application/octet-stream");
 response.addHeader("Content-Disposition", "attachment; filename="+filename);
 String cp=request.getSession().getServletContext().getRealPath("/");
 String path = cp+"download/"+filename;
 File file = new File(path);
 BufferedInputStream bis = null;
 BufferedOutputStream out = null;
 FileWriterWithEncoding fwwe =new FileWriterWithEncoding(file,"GBK");
 BufferedWriter bw = new BufferedWriter(fwwe);
 if(dataList!=null && !dataList.isEmpty()){
      for(String data : dataList){
        bw.write(data);
        bw.write("\n");
      }
    }
 bw.close();
 fwwe.close();
 try {
  bis = new BufferedInputStream(new FileInputStream(file));
  out = new BufferedOutputStream(response.getOutputStream());
  byte[] buff = new byte[2048];
  while (true) {
   int bytesRead;
   if (-1 == (bytesRead = bis.read(buff, 0, buff.length))){
   break;
   }
   out.write(buff, 0, bytesRead);
  }
  file.deleteOnExit();
 }
 catch (IOException e) {
  throw e;
 }
 finally{
  try {
  if(bis != null){
   bis.close();
  }
  if(out != null){
   out.flush();
   out.close();
  }
  }
  catch (IOException e) {
  throw e;
  }
 }
 delAllFile(cp+"download/");
 return null;

 }

Java代码实现层:

public List<String> exportIpMac() throws Exception {
 List<String> dataList = new ArrayList<String>();
 try {
  List<SiTopologyIpMacPortReal> list = siTopologyIpMacPortRealdao.selectAllData();
  dataList.add("ID,地址,IP地址,设备,设备名称,端口,更新时间");
  for (int i = 0; i < list.size(); i++) {
  dataList.add(list.get(i).getId() + "," + list.get(i).getMac()
   + "," + list.get(i).getIp() + ","
   + list.get(i).getUpIp() + ","
   + list.get(i).getUpName() + ","
   + list.get(i).getUpIfIndex() + ","
   + list.get(i).getModifyTime());
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
 return dataList;
 }

使用的是Chrome浏览器,下载的时候会直接在浏览器下面进行显示下载。

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

(0)

相关推荐

  • java生成csv文件乱码的解决方法示例 java导出csv乱码

    复制代码 代码如下: import java.io.File;import java.io.IOException;import java.util.List; import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Preconditions;import com.google.common.collect.Lists;import com

  • java实现批量导入.csv文件到mysql数据库

    这篇博文是在参加CCF时导入.csv文件时自己总结的,虽然NavicatForMysql可以导入.csv文件,可是当我导入的时候不知道是文件太大还是什么原因,总是会出现失败.然后就用java写了一个批量导入数据的类去导入该.csv文件,这里也没有考虑代码的结构,只是为了快速的完成这个工作,做一个总结. package com.cqu.price_prediction.farm; import java.io.File; import java.io.FileNotFoundException;

  • java导出csv方法实现讲解

    首先,通过ibatis中的sql语句查询出所要得到的记录,并将其存放在List中: 复制代码 代码如下: List<?> results = this.reportService.getArrayBeanReportDataSource(super.getQuery_sql_csv(), query_obj); 这样的情况下,因为我们是要写公共方法,所以使用?而没有使用一个确定的类型来标注. 所以才需要使用反射从List里取出的对象的属性值. 复制代码 代码如下: String[] Colum

  • java导出生成csv文件的方法

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我们一般使用poi操作excel,导入,导出都可以,但是poi很消耗内存,尤其在导出时,这个时候我们其实可以选择导出生成csv文件,因为其跟文本差不多,所以效率很高. 简单写了一个实现类,代码如下: /** * * 导出生成csv格式的文件 * @author ccg * @param titles

  • 应用Java泛型和反射导出CSV文件的方法

    本文实例讲述了应用Java泛型和反射导出CSV文件的方法.分享给大家供大家参考.具体如下: 项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. 复制代码 代码如下: public <T> void saveFile(List<T> list, String outFile) throws IOException {         if (list == null || list.isEmpty())

  • java实现CSV文件导入与导出功能

    年前在开发功能模块的时候用到了CSV文件导入导出,就此整理一下,便于大家参考. 导入导出功能很多时候用到的都是Excel文件,但是现在越来越多的使用了CSV文件进行此操作,它是一个纯文本文件,可以用记事本打开,也可以用Excel打开.CSV文件不像Excel那样有很多条条框框,它使用硬回车分割每条记录,用逗号分隔每条数据的字段. CSV格式的文件就是用硬回车和文本都好实现的表格,用Excel一读就成了表格.文件名后缀就是 .csv. 直接上代码吧! 导入部分 导入的时候基于Ajax请求,js代码

  • java利用easyexcel实现导入与导出功能

    目录 前言 1先添加依赖 2批量插入数据 3创建需要导出数据实体类 4创建一个类ExcelListener 5实现下载excel 6控制器添加我们的导入操作代码 7导出效果如图 8导入直接调用 前言 poi的解析方式是dom解析,把结果一次都读入内存操作,这样的操作平时是不会有问题的,但是并发量上来的时候就会出现OOM,EasyExcel,底层对象其实还是使用poi包的那一套.它只是将poi包的一部分抽了出来,摒弃掉了大部分业务相关的属性.由于它关注的业务是导入导出这一块,所以在处理大数据量的导

  • php实现CSV文件导入和导出

    项目开发中,很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件,那么具体该如何实现呢?本文将使用PHP并结合mysql,实现了CSV格式数据的导入和导出功能. 我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名.性别.年龄等信息. CREATE TABLE `student` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT N

  • Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel. 本地下载地址:h

  • Spring Boot项目如何优雅实现Excel导入与导出功能

    目录 背景 EasyExcel 问题 分析与解决 Spring Boot Excel 导入与导出 依赖引入 Excel 导入 基本导入功能 进阶导入功能 Excel 导出 Excel 导入参数校验 开启校验 校验规则定义 Bean Validation 定义校验规则 ExcelValidator 接口定义校验规则 校验结果接收 异常捕获接收校验结果 controller 方法参数接收校验结果 总结 背景 Excel 导入与导出是项目中经常用到的功能,在 Java 中常用 poi 实现 Excel

  • 把CSV文件导入到SQL Server表中的方法

    有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Server确实有这个功能. 首先先让我们看一下CSV文件,该文件保存在我的D:盘下,名为csv.txt,内容是: 现在就是SQL Server的关键部分了: 我们使用的是SQL Server的BULK INSERT命令,关于该命令的详细解释,请点击此处: 我们先在SQL Server中建立用于保存该信息

  • Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputS

  • 一文带你将csv文件导入到mysql数据库(亲测有效)

    目录 需要准备的工具: 第一步:打开安装好的Navicat Premium,连接数据库 第二步:创建数据库,右键127.0.0.1 第三步:导入数据 第四步:重新导入数据 第五步:数据校验 总结 如何将csv文件导入到MySQL数据库中(亲测有效) 需要准备的工具: OrderDaTa.csv文件 Navicat Premium(是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连接到MySQL,SQLite.Oracle及PostgreSQL资料库,让管理不同类型

  • 详解Java如何实现百万数据excel导出功能

    目录 前言 1.异步处理 1.1 使用job 1.2 使用mq 2.使用easyexcel 3.分页查询 4.多个sheet 5.计算limit的起始位置 6.文件上传到OSS 7.通过WebSocket推送通知 8.总条数可配置 9.order by商品编号 总结 前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在UI界面上点击全部导出按钮,就能导

  • php将csv文件导入到mysql数据库的方法

    本文实例讲述了php将csv文件导入到mysql数据库的方法.分享给大家供大家参考.具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一条条插入到mysql数据库,代码如下: 复制代码 代码如下: <?php $fname = $_files['myfile']['name']; $do = copy($_files['myfile']['tmp_name'],$fname); if ($

随机推荐