Java opencsv 生成、读取、下载、删除CSV文件

原创 2016年10月28日 10:08:42

1. 利用opencsv包中的CSVWriter类,生成csv文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
import com.opencsv.CSVWriter;

public abstract class CsvFileWriter<T> {

	abstract List<String[]> getCsvContent();
	
	abstract String getCsvFileName();
	
	abstract String getUuid();

	public String execute() throws Exception {
		String result = "";
		String savePath = "D:/csv/" + "writer" + File.separator;
		
		try {
			//如果保存路径不存在,则自动创建
			File file = new File(savePath);
			if (!file.exists()) {
				file.mkdir();
			}
			String filePath = savePath + getUuid() + getCsvFileName();
			OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8");
		    CSVWriter writer = new CSVWriter(out);
			
		    writer.writeAll(getCsvContent());
		    writer.close();
		    result = filePath;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return result;
	}
}


继承CSVFileWriter生成文件内容

import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.formula.functions.T;

import com.sun.tools.xjc.reader.xmlschema.bindinfo.BIConversion.User;

public class CsvWriter extends CsvFileWriter<T>{
	private long userId;
	private String uuid;
	private String fileName;
	
	public CsvWriter(long userId, String uuid, String fileName){//外部调用,将UserId,uuid(随机数),fileName传入
		this.userId = userId;
		this.uuid = uuid;
		this.fileName = fileName;
	}

	@Override
	List<String[]> getCsvContent() {
		List<String[]> allElements = new ArrayList<String[]>();
		//头文件
		String[] title = writeTitle();
		allElements.add(title);
//文件内容
		User user = (new UserDao()).findByID(userId);
		if (user != null) {
			String[] content = writeContent(user);
			allElements.add(content);
		}
		return allElements;
	}

	private String[] writeTitle() {
		String[] title = new String[]{
			"账户",
			"姓名",
			"电话",
			"地址",
			"性别"
		};
		return title;
	}


	private String[] writeContent(User user) {
		String[] content = new String[]{
			user.getAccount(),
			user.getName(),
			user.getTelephone(),
			user.getAddress(),
			user.getSex()
		};
		return content;
	}

	@Override
	String getCsvFileName() {
		return fileName;
	}

	@Override
	String getUuid() {
		return uuid;
	}
}


2. 利用opencsv中CSVReader,读取csv文件

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import com.opencsv.CSVReader;

public abstract class CsvFileReader {
	
	protected abstract String getFileName();

	protected abstract boolean readOneRow(String[] csvRow);

	public boolean execute() throws Exception {
		boolean result = false;
		
		try {
			File file = new File(getFileName());

			InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
			CSVReader csvReader = new CSVReader(isr);

			if (csvReader != null) {
				String[] csvRow = csvReader.readNext();	// row

				while ((csvRow = csvReader.readNext()) != null) {
					if(readOneRow(csvRow)){
						result = true;
					}
				}
				
				isr.close();
				csvReader.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return result;
	}
}


继承CSVFileReader读取导入csv文件内容
import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.util.ResolverUtil.Test;

public class CsvReader extends CsvFileReader{

	private List<Test> testList;

	private String fileName;

	public CsvReader(String fileName){
		testList = new ArrayList<Test>();
		this.fileName = fileName;
	}
	
	@Override
	protected boolean readOneRow(String[] csvRow) {
		boolean result = true;

		int i = 0;
		String account = csvRow[i++];
		String name = csvRow[i++];
		String tel = csvRow[i++];
		String address = csvRow[i++];
		String sex = csvRow[i++];

		User user = new User(account);

		user.setName(name);
		user.setTelephone(tel);
		user.setAddress(address);
		user.setSex(sex);
		
		testList.add(user);
		
		return result;
	}

	@Override
	protected String getFileName() {
		return fileName;
	}
	
	public List<Test> getTestList() {
		return testList;
	}

}

3. 下载csv文件

public String downloadCSVFile() throws Exception {
	String fileName = "";

	try {
		fileName = "export.csv";
		String filePath = "D:/csv/" + "writer" + File.separator + uuid + fileName;

		File export = new File(filePath);
		FileInputStream in = null;
		OutputStream out = response.getOutputStream();

		byte[] buffer = new byte[1024];
		int len = 0;
		response.setContentType("text/csv;charset=UTF-8");
		response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
		response.setCharacterEncoding("UTF-8");
		in = new FileInputStream(export);

		while ((len = in.read(buffer)) > 0) {
			out.write(buffer, 0, len);
		}

		out.flush();
		in.close();
		out.close();
		// 删除原文件
		export.delete();
	} catch (Exception e) {
		e.printStackTrace();
	}

	return null;
}



4. 删除csv文件
public static void deleteFiles(String filePath) {
	File file = new File(filePath);

	if (file.exists()) {
		File[] files = file.listFiles();
		for (int i = 0; i < files.length; i++) {
			if (files[i].isFile()) {
				files[i].delete();
			}
		}
	}
}
 
public static void deleteFile(String filePath, String fileName) {

	File file = new File(filePath);

	if (file.exists()) {
		File[] files = file.listFiles();

		for (int i = 0; i < files.length; i++) {
			if (files[i].isFile()) {
				if (files[i].getName().equals(fileName)) {
					files[i].delete();
					return;
				}
			}
		}
	}
}



Java读写CSV格式文件(opencsv)

使用,下载地址: 一,读取CSV
  • a19881029
  • a19881029
  • 2014年07月20日 17:55
  • 59620

opencsv方式读取csv文件,详解,示例

1.opencsv官网:http://opencsv.sourceforge.net/    jar包:opencsv-2.3.jar    下载地址:http://sourceforge.net/p...
  • han_huayi
  • han_huayi
  • 2017年02月17日 13:25
  • 3151

CSV类库:OpenCSV

一: CSV简介Comma-Separated Values(CSV), 因分隔符没有严格指定规范标准,可以使用逗号,也可以使用其他字符(如制表符\t、分号;等),所以CSV也称为 逗号分隔值或者字符...
  • vbirdbest
  • vbirdbest
  • 2017年09月10日 18:01
  • 1125

opencsv4.0 读写

openCSV是一款简单的用于解析CSV文件的java类库,它封装了CSV格式文件的读写操作,可将文件与java对象进行自动映射,自定义分隔符,使用转义符等。 在使用时有几点需要注意下:     ...
  • hellolovelife
  • hellolovelife
  • 2017年11月13日 16:31
  • 322

openCSV读写CSV文件

使用openCSV读写CSV文件的方法和例子,需注意UTF-8的BOM标识。可自动映射csv文件与javabean,方便读写操作。...
  • peterwanghao
  • peterwanghao
  • 2017年07月19日 16:44
  • 1520

OpenCSV 用法总结

最近 https://code.google.com/p/opencsv/
  • FX_SKY
  • FX_SKY
  • 2014年09月03日 14:48
  • 2921

Java+Selenium3方法篇44-利用opencsv读取csv文件

前面介绍了如何读取excel文件,本篇介绍如何读取vsc文件,什么是csv,它的定义是与逗号分隔的值(Comma-Separated Values),同样的Java中需要用到第三方lib去处理读取cs...
  • u011541946
  • u011541946
  • 2017年07月09日 23:27
  • 1411

用opencsv和用Bufferedreader/writer进行csv文件的读写及简单处理

最近要大量处理一批.csv文件,由于收集到的数据大部分是9列,但是有的行的列数大于9,因此想写个程序去批处理这些.csv文件,使得处理好的文件可以是规则的,方便导入数据库。 方法一: 首先我想到了...
  • YQlakers
  • YQlakers
  • 2017年04月21日 17:31
  • 963

Java读写CSV格式文件(opencsv)

转自:http://blog.csdn.net/a19881029/article/details/37959109 使用opencsv(opencsv-2.3.jar),下载地址:http://s...
  • qq5132834
  • qq5132834
  • 2017年01月11日 12:46
  • 346

Java读写CSV格式文件(opencsv)

使用opencsv(opencsv-2.3.jar),下载地址:http://sourceforge.net/projects/opencsv/files/latest/download 一,读...
  • u011202334
  • u011202334
  • 2016年01月05日 17:20
  • 429
收藏助手
不良信息举报
您举报文章:Java opencsv 生成、读取、下载、删除CSV文件
举报原因:
原因补充:

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