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條開個線程,往外讀。