java导出csv
❶ 用java导出CSV的问题!!!
我也正在做这样的导出问题
1.如果数据中本身存在换行符号,那么这条数据就会自动拆成2行
我想你只能在接受数据的时候,手动的把数据中的换行符号替换掉或者去掉
2.还有,这个导出的CSV文件的作用是往其他数据库里面导入,是不是用下面的格式也可以?
我想csv的格式没有那么多的限制,只要你在导入到数据库的时候能得到你想要的数据就行了吧
❷ Java 徒手导出csv文件
导述
在日常编程中,我们常常需要导出CSV文件。通常情况下,我们会借助第三方工具包来实现这一功能,因为它们提供了便捷且功能丰富的API。然而,在某些项目中,我们可能不希望引入额外的依赖。此时,直接通过Java代码生成CSV文件便成为了一种更简单、更灵活的解决方案。
在深入讨论如何直接生成CSV文件之前,让我们先来了解一下CSV格式的基本知识。CSV是一种常见的纯文本格式,主要用于存储表格数据,包括数字和文本。文件由多条记录组成,每条记录由多个字段通过特定字符分隔。最常用的分隔符是逗号或制表符,但实际应用中,分隔符可以根据需要自由选择。CSV文件通常具有较高的兼容性,可以在多种环境中轻松读取。
为了实现CSV文件的生成,我们可以利用Java中的流类,特别是PrintWriter。PrintWriter是一个字符类型的打印输出流,它继承自Writer接口,提供了多种写入字符的方法。通过使用PrintWriter,我们可以方便地将数据写入CSV文件,从而实现数据的导出。
实现流程主要包括以下几个步骤:
1. **选择编码**:在生成CSV文件时,我们需要注意编码问题,以确保输出的数据能够正确显示,尤其是在处理包含非英文字符(如中文)的情况下。在本文中,我们将选择GBK编码,以防止中文字符出现乱码。
2. **创建输出流**:初始化PrintWriter对象,指定输出流和编码方式,然后使用对象的write方法来输出数据。
3. **编写数据**:将数据按照CSV格式的规则组织起来,每一项数据之间通过指定的分隔符(如逗号)进行分隔,每一条记录结束时使用换行符进行分隔。
总结
在编程实践中,我们常常依赖各种工具和库来提高效率,但了解和掌握基础编程技能对于个人能力的提升至关重要。过分依赖第三方工具可能会导致我们失去自主解决问题的能力。通过自行尝试和实践,我们可以更好地理解和应用这些工具,从而避免在需要时陷入困境。
总之,学习如何通过Java代码生成CSV文件不仅能够帮助我们掌握基础的文件操作技能,还能增强我们对编程语言底层逻辑的理解,进而提升编程能力。在掌握基础技能的同时,我们也应该鼓励自己勇于尝试,不断突破,以提高解决问题的灵活性和创造性。
❸ 各位大虾:用java代码生成的csv文件怎么设置单元格长度,及居中之类的信息(时间太长显示成########了)。
那个显示成### 是你单元格宽度太小,显示不下而已,用鼠标多拽大一些就可以了
csv只保存内容,不管显示方式,无法设值你说的那些显示相关的属性
csv值保存表格的内容
❹ 需要一份500行的java程序,期末大作业,最好带详细注释。
- 1,张三,男2,李四,男3,小红,女
Java生成CSV文件简单操作实例
CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件。在 CSV文件中,数据“栏”以逗号分隔,可允许程序通过读取文件为数据重新创建正确的栏结构,并在每次遇到逗号时开始新的一栏。如:
123Java生成CSV文件(创建与导出封装类)
package com.yph.omp.common.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
/**
* Java生成CSV文件
*/
public class CSVUtil {
/**
* 生成为CVS文件
*
* @param exportData
* 源数据List
* @param map
* csv文件的列表头map
* @param outPutPath
* 文件路径
* @param fileName
* 文件名称
* @return
*/
@SuppressWarnings("rawtypes")
public static File createCSVFile(List exportData, LinkedHashMap map,
String outPutPath, String fileName) {
File csvFile = null;
BufferedWriter csvFileOutputStream = null;
try {
File file = new File(outPutPath);
if (!file.exists()) {
file.mkdir();
}
// 定义文件名格式并创建
csvFile = File.createTempFile(fileName, ".csv",
new File(outPutPath));
// UTF-8使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(csvFile), "GBK"), 1024);
// 写入文件头部
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator
.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
csvFileOutputStream
.write(""" + (String) propertyEntry.getValue() != null ? (String) propertyEntry
.getValue() : "" + """);
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
csvFileOutputStream.newLine();
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
Object row = (Object) iterator.next();
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator
.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
/*-------------------------------*/
//以下部分根据不同业务做出相应的更改
StringBuilder sbContext = new StringBuilder("");
if (null != BeanUtils.getProperty(row,(String) propertyEntry.getKey())) {
if("证件号码".equals(propertyEntry.getValue())){
//避免:身份证号码 ,读取时变换为科学记数 - 解决办法:加 (用Excel打开时,证件号码超过15位后会自动默认科学记数)
sbContext.append(BeanUtils.getProperty(row,(String) propertyEntry.getKey()) + " ");
}else{
sbContext.append(BeanUtils.getProperty(row,(String) propertyEntry.getKey()));
}
}
csvFileOutputStream.write(sbContext.toString());
/*-------------------------------*/
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()) {
csvFileOutputStream.newLine();
}
}
csvFileOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return csvFile;
}
/**
* 下载文件
*
* @param response
* @param csvFilePath
* 文件路径
* @param fileName
* 文件名称
* @throws IOException
*/
public static void exportFile(HttpServletRequest request,
HttpServletResponse response, String csvFilePath, String fileName)
throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/csv;charset=GBK");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fileName.getBytes("GB2312"), "ISO8859-1"));
InputStream in = null;
try {
in = new FileInputStream(csvFilePath);
int len = 0;
byte[] buffer = new byte[1024];
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (FileNotFoundException e1) {
System.out.println(e1);
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e1) {
throw new RuntimeException(e1);
}
}
}
}
/**
* 删除该目录filePath下的所有文件
*
* @param filePath
* 文件目录路径
*/
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();
}
}
}
}
/**
* 删除单个文件
*
* @param filePath
* 文件目录路径
* @param fileName
* 文件名称
*/
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;
}
}
}
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void createFileTest() {
List exportData = new ArrayList<Map>();
Map row1 = new LinkedHashMap<String, String>();
row1.put("1", "11");
row1.put("2", "12");
row1.put("3", "13");
row1.put("4", "14");
exportData.add(row1);
row1 = new LinkedHashMap<String, String>();
row1.put("1", "21");
row1.put("2", "22");
row1.put("3", "23");
row1.put("4", "24");
exportData.add(row1);
LinkedHashMap map = new LinkedHashMap();
map.put("1", "第一列");
map.put("2", "第二列");
map.put("3", "第三列");
map.put("4", "第四列");
String path = "d:/export";
String fileName = "文件导出";
File file = CSVUtil.createCSVFile(exportData, map, path, fileName);
String fileNameNew = file.getName();
String pathNew = file.getPath();
System.out.println("文件名称:" + fileNameNew );
System.out.println("文件路径:" + pathNew );
}
}
//注:BeanUtils.getProperty(row,(String) propertyEntry.getKey()) + " " ,只为解决数字格式超过15位后,在Excel中打开展示科学记数问题。
❺ java如何导出csv文件 用户点击导出可以导出到他想保存的地方
这种通常是如下做法:
1:提供查询页面,让用户输入查询条件
2:根据查询条件到数据库去检索,并获取到对应的记录
3:生成csv到本地(可以省略,生成临时文件到tomcat的临时目录)
4:用读取文件,用response写流到客户端
❻ java将查询数据导出成csv文件的问题
生成.csv文件有第三方包javacsv.jar,例子网上找,很简单
提示用户下载,用流实现,网络上更多
提供个JSP的例子给你。
<%@ page language="java" pageEncoding="UTF-8"%>
<%
// example:
// <a href="download.jsp?p=img/test.gif">download image</a>
String path = request.getParameter("p");
String name = request.getParameter("name");
String root = getServletContext().getRealPath(path);
if (name == null) {
int index = path.lastIndexOf("/");
if (index >= 0) {
name = path.substring(index + 1);
} else {
name = path;
}
}
response.setContentType("unknown");
response.addHeader("content-disposition", "filename=\"" + name + "\"");
java.io.OutputStream os = response.getOutputStream();
try {
java.io.FileInputStream fis = new java.io.FileInputStream(root);
byte[] b = new byte[1024];
int i = 0;
while ( (i = fis.read(b)) > 0 ) {
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
out.clear();
out = pageContext.pushBody();
%>
❼ java导出大数据量到csv文件,数据库大概有4、5W条数据,性能很慢,求各位大侠给个好方法
多线程啊,按照rownumber,比方说每5000或2000条开个线程,往外读。