java将查询数据导出成csv文件的问题

Python014

java将查询数据导出成csv文件的问题,第1张

解释:csv文件实际上就是字符串,之间用“,”进行分割,之后进行的存储。

工具类如下:

import java.io.BufferedWriter

import java.io.File

import java.io.FileOutputStream

import java.io.IOException

import java.io.OutputStreamWriter

import java.util.List

/**

*

* CSV文件导出工具类

*/

public class CSVUtils {

/**

* CSV文件生成方法

* @param head

* @param dataList

* @param outPutPath

* @param filename

* @return

*/

public static File createCSVFile(List<Object>head, List<List<Object>>dataList,

String outPutPath, String filename) {

File csvFile = null

BufferedWriter csvWtriter = null

try {

csvFile = new File(outPutPath + File.separator + filename + ".csv")

File parent = csvFile.getParentFile()

if (parent != null &&!parent.exists()) {

parent.mkdirs()

}

csvFile.createNewFile()

// GB2312使正确读取分隔符","

csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(

csvFile), "GB2312"), 1024)

// 写入文件头部

writeRow(head, csvWtriter)

// 写入文件内容

for (List<Object>row : dataList) {

writeRow(row, csvWtriter)

}

csvWtriter.flush()

} catch (Exception e) {

e.printStackTrace()

} finally {

try {

csvWtriter.close()

} catch (IOException e) {

e.printStackTrace()

}

}

return csvFile

}

/**

* 写一行数据方法

* @param row

* @param csvWriter

* @throws IOException

*/

private static void writeRow(List<Object>row, BufferedWriter csvWriter) throws IOException {

// 写入文件头部

for (Object data : row) {

StringBuffer sb = new StringBuffer()

String rowStr = sb.append("\"").append(data).append("\",").toString()

csvWriter.write(rowStr)

}

csvWriter.newLine()

}

}

准备一个有乱码的csv文件用于演示,如图。

首先我们右键此csv文件,选择“用记事本打开”

打开后,点击“文件”--“另存为”。

我们发现默认编码是“utf-8”,所以一些excel表格软件就会显示乱码。对于这样,我们只要改成ansi就行了,按确定。

5

用excel表格软件再打开,就不会显示乱码了。

这种通常是如下做法:

1:提供查询页面,让用户输入查询条件

2:根据查询条件到数据库去检索,并获取到对应的记录

3:生成csv到本地(可以省略,生成临时文件到tomcat的临时目录)

4:用读取文件,用response写流到客户端