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

OpenCSV 用法总结

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

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

1.opencsv官网:http://opencsv.sourceforge.net/    jar包:opencsv-2.3.jar    下载地址:http://sourceforge.net/p...

openCSV读写CSV文件

使用openCSV读写CSV文件的方法和例子,需注意UTF-8的BOM标识。可自动映射csv文件与javabean,方便读写操作。...

Java读写CSV格式文件(opencsv)

转自:http://blog.csdn.net/a19881029/article/details/37959109 使用opencsv(opencsv-2.3.jar),下载地址:http://s...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Java读写CSV格式文件(opencsv)

使用opencsv(opencsv-2.3.jar),下载地址:http://download.csdn.net/detail/jinwufeiyang/9664120 一,读取CSV格式文件: ...

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

用javacsv API 来操作csv文件

javacsv是国外开发的一个比较好的操作csv文件的API,这里简单讲一下用法。 先下载javacsv2.0.zip的文件,解压后,把javacsv.jar 添加到项目中。  本站下载地址: ...
  • a9529lty
  • a9529lty
  • 2014年12月01日 16:19
  • 14422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java opencsv 生成、读取、下载、删除CSV文件
举报原因:
原因补充:

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