csv读取写出

2 篇文章 0 订阅

// 需要引入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;" οnchange="uploadFile()">
      <button type="button" class="btn btn-info" οnclick="importCsv()">
      <span style="white-space:pre">		</span><span class="glyphicon"></span> 导入csv
      </button>
</form>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值