您的位置:首页 > 编程语言 > Java开发

JAVA操作csv文件(导入导出)

2015-11-10 09:50 751 查看
CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件。在 CSV文件中,数据“栏”以逗号分隔,可允许程序通过读取文件为数据重新创建正确的栏结构,并在每次遇到逗号时开始新的一栏。

1、csv文件用文本打开显示为:

1,张三,男
2,李四,男
3,小红,女


2、csv文件用Excel打开显示为:



一、利用javacsv2.0操作csv文件:

package com.iflytek.demo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

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

/**
* 利用javacsv2.0做导入导出csv文件工具类<br/>
*
*
* @author kpchen
*
*/
public class CSVUtil {

static char separator = ',';

public static void main(String[] args) throws Exception {

// 测试导出
String filePath = "D:/test.csv";
List<String[]> dataList = new ArrayList<String[]>();
for (int i = 0; i < 10; i++) {
dataList.add(new String[] { "0" + i, "小明" + i, "java" + i });
}
exportCsv(dataList, filePath);

// 测试导入
List<String[]> datas = importCsv(filePath);
for (String[] strings : datas) {
System.out.println(strings[0]);
}
}

/**
* java导入csv文件
*
* @param filePath
*            导入路径
* @return
* @throws Exception
*/
public static List<String[]> importCsv(String filePath) throws Exception {
CsvReader reader = null;
List<String[]> dataList = new ArrayList<String[]>();
try {
reader = new CsvReader(filePath, separator, Charset.forName("GBK"));

// 读取表头
reader.readHeaders();
// 逐条读取记录,直至读完
while (reader.readRecord()) {
dataList.add(reader.getRawRecord().split(","));
// // 下面是几个常用的方法
// 读取一条记录
System.out.println(reader.getRawRecord());
// 按列名读取这条记录的值
System.out.println(reader.get(0));
System.out.println(reader.get(1));
System.out.println(reader.get(2));
System.out.println(reader.get(3));
}
} catch (Exception e) {
System.out.println("读取CSV出错..." + e);
throw e;
} finally {
if (null != reader) {
reader.close();
}
}

return dataList;
}

/**
* java导出cvs文件
*
* @param dataList
*            数据集
* @param filePath
*            导出路径
* @return
* @throws Exception
*/
public static boolean exportCsv(List<String[]> dataList, String filePath) throws Exception {
boolean isSuccess = false;
CsvWriter writer = null;
FileOutputStream out = null;
try {
out = new FileOutputStream(filePath, true);
writer = new CsvWriter(out, separator, Charset.forName("GBK"));
for (String[] strs : dataList) {
writer.writeRecord(strs);
}

isSuccess = true;
} catch (Exception e) {
System.out.println("生成CSV出错..." + e);
throw e;
} finally {
if (null != writer) {
writer.close();
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
System.out.println("exportCsv close Exception: " + e);
throw e;
}
}
}

return isSuccess;
}

}


二、利用流操作csv文件

package com.iflytek.demo;

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;

public class CSVUtil2 {

public static void main(String[] args) {
// 测试 导出
// List<String> dataList = new ArrayList<String>();
// dataList.add("1,张三,男");
// dataList.add("2,李四,男");
// dataList.add("3,小红,女");
// boolean isSuccess = exportCsv(new File("D:/test.csv"), dataList);
// System.out.println(isSuccess);

// 测试 导入
List<String> dataList = importCsv(new File("D:/test.csv"));
if (dataList != null && !dataList.isEmpty()) {
for (String data : dataList) {
System.out.println(data);
}
}
}

/**
* 导出
*
* @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 {
out = new FileOutputStream(file);
osw = new OutputStreamWriter(out);
bw = new BufferedWriter(osw);
if (dataList != null && !dataList.isEmpty()) {
for (String data : dataList) {
bw.append(data).append("\r\n");
}
}
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;
}

}


源码:http://pan.baidu.com/s/1nt1r7ap

参考:http://write.blog.csdn.net/postedit/49755535
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: