csv读取写出

原创 2016年05月31日 15:30:36

// 需要引入javacsv-2.0.jar


// csvUtil  csv帮助类

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

/*import javax.servlet.http.HttpServletResponse;*/

public class csvUtil {
	/**
	 * 读取CSV文件
	 * @param csvFilePath 文件路径
	 */
	public static ArrayList<String[]> readeCsv(String csvFilePath) {
		ArrayList<String[]> csvList = new ArrayList<String[]>(); // 用来保存数据
		try {
			CsvReader reader = new CsvReader(csvFilePath, ',',Charset.forName("GBK")); // 一般用这编码读就可以了
			reader.readHeaders(); // 跳过表头 如果需要表头的话,不要写这句。
			while (reader.readRecord()) { // 逐行读入除表头的数据
				csvList.add(reader.getValues());
			}
			reader.close();
		} catch (Exception ex) {
			System.out.println(ex);
		}
		return csvList;
	}
	
	/**
	 * 读取CSV文件
	 * @param csvIs csv导入数据流
	 */
	public static ArrayList<String[]> readeCsvByIs(InputStream csvIs) {
		ArrayList<String[]> csvList = new ArrayList<String[]>(); // 用来保存数据
		try {
			CsvReader reader = new CsvReader(csvIs,Charset.forName("GBK")); // 一般用这编码读就可以了
			reader.readHeaders(); // 跳过表头 如果需要表头的话,不要写这句。
			while (reader.readRecord()) { // 逐行读入除表头的数据
				csvList.add(reader.getValues());
			}
			reader.close();
		} catch (Exception ex) {
			System.out.println(ex);
		}
		return csvList;
	}
	

	/**
	 * 写入CSV文件
	 * 
	 * @param csvFilePath 写出路径
	 * 
	 * @param contents 数据内容
	 */
	public static void writeCsv(String csvFilePath ,List<String[]> contents) {
		try {
			//String csvFilePath = "c:/test.csv";
			CsvWriter wr = new CsvWriter(csvFilePath, ',',Charset.forName("GBK"));
			for (int i = 0; i < contents.size(); i++) {
				wr.writeRecord(contents.get(i));
			}
			wr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	 /**
     * 输出文件
     * @param ou   文件流
     * @param list      需要输出的数据
     * @throws java.io.IOException
     */
    public static void writeCsv(OutputStream ou, List<String[]> list) throws IOException {
        CsvWriter cw = new CsvWriter(ou, ',', Charset.forName("UTF-8"));
        for(String[] s: list) {
            cw.writeRecord(s);
        }
        //在文件中增加BOM,详细说明可以Google,该处的byte[] 可以针对不同编码进行修改
        ou.write(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF });
        cw.flush();
        cw.close();
    }

    /**
     * 导出csv模板
     *
     * @param response
     * @param headers 模板列标题
     * @param csvName csv文件名
     * @throws java.io.IOException
     */
    public static void exportCsv(HttpServletResponse response,String headers,String csvName) throws IOException {
        OutputStream fos = response.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        try {
            fos = response.getOutputStream();
            bos = new BufferedOutputStream(fos);
            //这个就就是弹出下载对话框的关键代码
            response.setContentType("text/csv");
            response.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode(csvName+".csv", "UTF-8"));
            headers += "\n";
            bos.write(headers.getBytes("GBK"));
            bos.flush();
        } catch (IOException ex) {
            System.out.print(ex);
        } finally {
            fos.close();
            bos.close();
        }
    }
}

// controller层调取

/**
     * 导入csv文件
     *
     * @throws java.io.IOException
     */
    @RequestMapping("/importCsv")
    public Object importCsv(MultipartHttpServletRequest request){
        try { //文件数据
            MultipartFile file = request.getFile("fileName");
            //读取csv文件,获取csv中的数据
            ArrayList<String[]> csvList = CsvUtil.readeCsvByIs(file.getInputStream());
        } catch (Exception ex) {
            System.out.print(ex);
        }
        return 1;
    }

 /**
     * 导出csv模板
     *
     * @param response
     * @throws java.io.IOException
     */
    @RequestMapping("/exportCsv")
    public void exportCsv(HttpServletRequest request,HttpServletResponse response) throws IOException {
        String headers = "header1,header2,header3";
        String csvName = "csvName";
        CsvUtil.exportCsv(response,headers,csvName);
    }

js导入按钮代码:

function importCsv(){
    var dataForm = document.forms['dataForm'];
    dataForm.fileName.click();
}

//选择上传文件后触发
function uploadFile(){
    ajaxFileUpload();
}

function ajaxFileUpload() {
    $.ajaxFileUpload({
        url : url,//用于文件上传的服务器端请求地址
        secureuri : false,//一般设置为false
        fileElementId : 'fileName',//文件上传控件的id属性
        dataType : 'json',//返回值类型 一般设置为json
        success : function(data) //服务器成功响应处理函数
        {
            
        }
    })
}

html页面代码:

<form id="dataForm" name="dataForm" enctype="multipart/form-data" method="post" >
      <input id="fileName" name="fileName" type="file" style="display:none;" onchange="uploadFile()">
      <button type="button" class="btn btn-info" onclick="importCsv()">
      <span style="white-space:pre">		</span><span class="glyphicon"></span> 导入csv
      </button>
</form>




版权声明:本文为博主原创文章,未经博主允许不得转载。

csv写入时指定表头

import csv with open('names.csv', 'w') as csvfile: fieldnames = ['first_name', 'last_name'] ...

C# csv 读取 写出

  • 2013年05月15日 10:03
  • 739KB
  • 下载

Java IO 对字符的读取和写出

1、对字符的读取 只能读取纯文本,不能读取二进制文件如音频,视频等,doc文件以及其他不是纯文本的文档。 1.1 纯文本的读取 使用java.io.Reader类读取纯文本文件,其源代码重要的...

Ubuntu LAMP环境下,用 jsp 写出一个页面,读取MYSQL实验中的数据表数据

第一种动态语言JSP a.实验环境描述 jdk1.8 mysql Ver 14.14 apache-tomcat-8.5.15 ubuntu 12.04.5 b.系统架构图 c.相关配置总结 ...
  • Elrah
  • Elrah
  • 2017年05月30日 23:39
  • 197

Java IO 对字节的读取和写出

Java IO 对字节的读取和写出本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图...

IO流第七课,字符流、纯文本、节点流,Reader、FileReader、Writer、FileWriter读取、写出、拷贝

字符流:只能处理纯文本,全部为可见字符,后缀为.txt和.html 节点流  Reader   FileReader              Writer    FileWriter ...

IO_字节流_节点流_文件读取_写出_追加文件_拷贝文件JAVA147-148

IO_字节流_节点流_文件读取_写出_追加文件_拷贝文件JAVA147-148

java中使用SAX读取和写出XML文件

SAX是一种事件驱动的流式XML文件处理方式,区别与DOM方式的是不需要在内存中建一棵DOM树,而是根据读取XML时遇到的标签事件来顺序处理,因此具有速度快,内存占用上的优点。SAX往往是大容量XML...
  • chjttony
  • chjttony
  • 2012年05月28日 20:21
  • 12009

R语言︱list用法、批量读取、写出数据时的用法

列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可 以是任意对象,不同元素不必是同一类型。元素本身允许是其它复杂数据类型,比如,列表 的一个元素也允许是列表。例如: > r...

java:FileInputStream读取文件 FileOutputStream写出文件

package cn.java.file; import java.io.File; import java.io.FileInputStream; import java.io.IOExcepti...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:csv读取写出
举报原因:
原因补充:

(最多只允许输入30个字)