1. 程式人生 > >java往csv檔案中匯出百萬級資料

java往csv檔案中匯出百萬級資料

package com.hcycom.action;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.List;


import jxl.Workbook;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;


import com.hcycom.bean.MonthValue;
import com.hcycom.page.page;
import com.hcycom.service.Data;


public class Excel {
//static String url = "/opt/apache-tomcat-6.0.37/file/";
static String url = "D:/opt/apache-tomcat-6.0.37/file/";
Data data;
public void setExcel(String leixing, String name,page pg) {
if ("excel".equals(leixing)) {
wenjian(pg, name);
}
if ("cvs".equals(leixing)||"plCSV".equals(leixing)) {
wenJianCsv(pg, name);
}
if ("txt".equals(leixing)) {
wenJianTxt(pg, name);
}
}
public void setExcelCSV(String name,List<MonthValue> list) {
wenJianPLCsv(list, name);
}
public void wenJianPLCsv(List<MonthValue> list, String name) {         //匯出百萬條資料name是檔名  list是資料
try {
File file = new File(url + name + ".csv");
if(!file.exists()){
System.out.println("建立檔案!!!");
file.createNewFile();
}
writeFileContent(url + name + ".csv", list);
//writeFileContent()這個方法是分批往csv檔案中追加資料  ,下面註釋掉的是一次性往csv檔案中寫資料
/*FileOutputStream stream;// provides file access
OutputStreamWriter writer;// writes to the file
stream = new FileOutputStream(file);
writer = new OutputStreamWriter(stream, "gb2312");
for (int q = 0; q < list.size(); q++) {
writer.write(list.get(q).getAqi());
writer.write(list.get(q).getSO2());
writer.write("\r\n");
}
writer.close();
stream.close();*/
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}


}
public static boolean writeFileContent(String filepath,List<MonthValue> list) throws IOException{
       Boolean bool = false;
       String temp  = "";
       
       FileInputStream fis = null;
       InputStreamReader isr = null;
       BufferedReader br = null;
       FileOutputStream fos  = null;
       PrintWriter pw = null;
       try {
           File file = new File(filepath);//檔案路徑(包括檔名稱)
           //將檔案讀入輸入流
           fis = new FileInputStream(file);
           isr = new InputStreamReader(fis);
           br = new BufferedReader(isr);
           StringBuffer buffer = new StringBuffer();
           int i;
           //檔案原有內容
           for(i=0;(temp =br.readLine())!=null;i++){
               buffer.append(temp);
               // 行與行之間的分隔符 相當於“\n”
               buffer = buffer.append(System.getProperty("line.separator"));
           }
           for (int q = 0; q < list.size(); q++) {
            buffer.append(list.get(q).getId()+",");
            buffer.append(list.get(q).getTime_point()+",");
            buffer.append(list.get(q).getAqi()+",");
            buffer.append(list.get(q).getArea()+",");
            buffer.append(list.get(q).getPosition_name()+",");
            buffer.append(list.get(q).getStation_code()+",");
            buffer.append(list.get(q).getSO2()+",");
            buffer.append(list.get(q).getNO2()+",");
            buffer.append(list.get(q).getCO()+",");
            buffer.append(list.get(q).getO3()+",");
            buffer.append(list.get(q).getPM2_5()+",");
            buffer.append(list.get(q).getPM10()+",");
           buffer.append(list.get(q).getPrimary_pollutant().replaceAll(",", ",")+",");
 //逗號在csv檔案中相當於tab鍵,每個欄位後面加上逗號是分割單元格replaceAll(",", ",")是一個單元格中的資料存在逗號,將英文逗號替換成中文逗號,csv不解析,會直接按字串處理,這樣就不會換單元格了,文字中也會顯示逗號,不影響正常的閱讀。
            buffer.append(list.get(q).getQuality()+" \r\n");
           }
           fos = new FileOutputStream(file);
           pw = new PrintWriter(fos);
           pw.write(buffer.toString().toCharArray());
           pw.flush();
           bool = true;
       } catch (Exception e) {
           e.printStackTrace();
       }finally {
           //不要忘記關閉
           if (pw != null) {
               pw.close();
           }
           if (fos != null) {
               fos.close();
           }
           if (br != null) {
               br.close();
           }
           if (isr != null) {
               isr.close();
           }
           if (fis != null) {
               fis.close();
           }
       }
       return bool;
   }
public void wenjian(page pg, String name){                                   //這是一次導數EXCLE檔案

jxl.write.WritableWorkbook wwb = null;
try {
System.out.println("excel action wenjian  name:"+name);
List<List<String>> list = pg.getListl();
File file = new File(url + ""+name+".xls");
System.out.println("url:"+file.getAbsolutePath()+"\n "+file.toString());
file.delete();
wwb = Workbook.createWorkbook(file);
WritableFont font3 = new WritableFont(
WritableFont.createFont("宋體"), 12, WritableFont.NO_BOLD);
WritableCellFormat f = new WritableCellFormat(font3);
jxl.write.WritableSheet ws = wwb.createSheet("Sheet1", 0);


ws.setColumnView(0, 45); // 設定列的寬度
ws.setColumnView(1, 20); // 設定列的寬度
ws.setColumnView(2, 30); // 設定列的寬度
ws.setColumnView(3, 15); // 設定列的寬度
ws.setColumnView(4, 15); // 設定列的寬度
ws.setColumnView(5, 15); // 設定列的寬度
ws.setColumnView(6, 15); // 設定列的寬度
ws.setColumnView(7, 15); // 設定列的寬度
ws.setColumnView(8, 15); // 設定列的寬度
ws.setColumnView(9, 15); // 設定列的寬度
ws.setColumnView(10, 30); // 設定列的寬度
ws.setColumnView(11, 30); // 設定列的寬度

for (int q = 0; q < list.size(); q++) {
for (int w = 1; w < list.get(q).size(); w++) {
if (!"0".equals(list.get(q).get(w))) {
jxl.write.Label labelC = new jxl.write.Label(w - 1, q,
list.get(q).get(w), f);
ws.addCell(labelC);
} else {
jxl.write.Label labelC = new jxl.write.Label(w - 1, q,
"-", f);
ws.addCell(labelC);
}
}
}
wwb.write();
wwb.close();
} catch (Exception e) {
try {
wwb.close();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}


public void wenJianCsv(page pg, String name) {  //匯出
csv檔案
try {
System.out.println("pa:"+pg);
File file = new File(url + name + ".csv");
file.createNewFile();
List<List<String>> list = pg.getListl();
FileOutputStream stream;// provides file access
OutputStreamWriter writer;// writes to the file
stream = new FileOutputStream(file);
writer = new OutputStreamWriter(stream, "gb2312");
for (int q = 0; q < list.size(); q++) {
for (int w = 1; w < list.get(q).size(); w++) {
if (w == 1) {
if (!"0".equals(list.get(q).get(w))) {
writer.write(list.get(q).get(w));
} else {
writer.write("-");
}
} else {
if (!"0".equals(list.get(q).get(w))) {
writer.write("," + list.get(q).get(w));
} else {
writer.write("," + "-");
}
}
}
writer.write("\r\n");
}
writer.close();
stream.close();

} catch (IOException e1) {


} catch (Exception e) {
e.printStackTrace();
}


}


public void wenJianTxt(page pg, String name) {                       //匯出text檔案
try {
File file = new File(url + name + ".txt");
file.createNewFile();
List<List<String>> list = pg.getListl();
FileOutputStream stream;// provides file access
OutputStreamWriter writer;// writes to the file
stream = new FileOutputStream(file);
writer = new OutputStreamWriter(stream, "gb2312");
for (int q = 0; q < list.size(); q++) {
for (int w = 1; w < list.get(q).size(); w++) {
if (w == 1) {
if (!"0".equals(list.get(q).get(w))) {
writer.write(list.get(q).get(w));
} else {
writer.write("-");
}
} else {
if (!"0".equals(list.get(q).get(w))) {
writer.write("," + list.get(q).get(w));
} else {
writer.write("," + "-");
}
}
}
writer.write("\r\n");
}
writer.close();
} catch (IOException e1) {


} catch (Exception e) {
e.printStackTrace();
}


}


public Data getData() {
return data;
}


public void setData(Data data) {
this.data = data;
}


}

相關推薦

javacsv檔案匯出百萬資料

package com.hcycom.action; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS

php - 從資料庫匯出百萬資料(CSV檔案)

將資料庫連線資訊、查詢條件、標題資訊替換為真實資料即可使用。 <?php set_time_limit(0); ini_set('memory_limit', '128M'); $fileName = date('YmdHis', time()); header('Content-

JavaCSV檔案讀取資料和寫入

.CSV檔案是以逗號分割的資料倉儲,讀取資料時從每一行中讀取一條資料元祖,也就是一條資料,再用字元分割的方式獲取表中的每一個數據項。 package com.conn.csv;

PHP百萬資料匯出方案(多csv檔案壓縮)

概述: 最近公司專案要求把資料除了頁面輸出也希望有匯出功能,雖然之前也做過幾個匯出功能,但這次資料量相對比較大,差不多一天資料就20W條,要求導7天或者30天,那麼資料量就輕鬆破百萬了甚至破千萬,因此開發的過程中發現了一些大資料匯出的坑,在此跟大家分享一下,

PHP百萬資料匯出csv格式OR文字格式

廢話不說,先來上一個小小的DEMO <?php header('Content-Type: text/csv'); header('Content-Transfer-Encoding: binary'); for($i=0;$i<500000;$i++){ ech

Java下將資料寫入CSV檔案

import java.io.*; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.uti

java實現如何將百萬資料高效的匯出到Excel表單

ps: 首先科普一下基礎知識  Excel 2003及以下的版本。一張表最大支援65536行資料,256列。也就是說excel2003完全不可能滿足百萬資料匯出的需求。  Excel 2007-2010版本。一張表最大支援1048576行,16384列;  筆者使用的是off

JavaCSV檔案加密後匯入匯出功能小結

技術總結 本次做CSV檔案的加密後的匯入匯出功能,遇到的問題。在這裡做個總結,以備不時之需。 1.      加密 加密採用的是DES加密,整個加密類貼出來。 package com.lddsm.util; import java.io.FileInputStream; 

java如何設定.csv檔案時間的格式

csv是逗號分割值得縮寫,不可以定義單元格格式,所以匯出來的檔案,如下圖,時間格式不完整,想了半天, 給時間前面拼接一個製表符程式碼如下圖 匯出來的時間就是yyyy-mm-dd hh:mm:ss的完整格式,

java 分頁匯出百萬資料到excel,分頁實現

最近修改了一個匯出員工培訓課程的歷史記錄(一年資料),匯出功能本來就有的,不過前臺做了時間限制(只能選擇一個月時間內的),還有一些必選條件, 匯出的資料非常有侷限性。心想:為什麼要做出這麼多條件限制呢?條件限制無所謂了,能限制匯出資料的準確性,但是時間? 如果我想匯出一年的資料,還要一月一月的去匯出,這也太扯

在 Laravel 5 使用 Laravel Excel 實現 Excel/CSV 檔案匯入匯出功能

1、簡介Laravel Excel 在 Laravel 5 中整合 PHPOffice 套件中的 PHPExcel,從而方便我們以優雅的、富有表現力的程式碼實現Excel/CSV檔案的匯入和匯出。本文我們將在Laravel中使用Laravel Excel簡單實現Excel檔案

java讀取分片msyql資料到csv檔案

java讀取分片msyql資料到csv檔案當中 public class demoTest { @Test public void testDemo1() { ApplicationContext context = new

如何用java讀取csv檔案指定行列的資料,並將csv資料元素隨機置零後儲存到另一個csv檔案

這個流程可以大致分為兩步驟:1.讀取csv檔案中的資料2.生成隨機數,將csv的資料隨機置零,將新生成的檔案儲存到新的csv中一、首先我們進行第一步:讀取csv中的檔案:讀取函式格式為public static double readin(int row,int col)

java資料寫入到csv檔案

   對於csv檔案,因為要將資料分別的寫入到每一個單元格中。用什麼來分開當前單元格和下一個單元格之間呢?這裡就用到了“  , ”逗號可以分割單元格。 舉例說明: 我們這裡用一個輸出流將資料寫入到csv檔案中 FileOutputStream fos=new FileOu

SSM整合開發之CSV檔案匯入匯出實戰-鍾林森-專題視訊課程

SSM整合開發之CSV檔案匯入匯出實戰—65人已學習 課程介紹         本課程將給大家分享如何基於SSM實現CSV檔案的匯入匯出,並講解目前企業級JavaWeb應用mvc三層模式的開發流程,

CSV檔案讀取jpg圖片的URL地址並多執行緒批量下載

很多時候,我們的網站上傳圖片時並沒有根據內容進行資料夾分類,甚至會直接儲存到阿里雲的OSS或是七牛雲等雲端儲存上。這樣,當我們需要打包圖片時,就需要從資料庫找尋分類圖片,通過CURL進行下載。我最近剛剛完成了一個這樣的任務,覺得會比較常用,就把程式放到了github上分享給大家,希望大家能夠喜歡。 do

Java讀取CSV檔案CSV檔案資料內容包含逗號處理)

文章目錄 0. 前言 1. 解決方案 2. 程式碼片段 0. 前言 最近在公司寫專案時,有個匯入csv格式檔案資料的需求。Java讀取csv檔案時預設是按照 ,[英文逗號]分割的

JAVA使用POI如何匯出百萬級別資料(轉載)

用過POI的人都知道,在POI以前的版本中並不支援大資料量的處理,如果資料量過多還會常報OOM錯誤,這時候調整JVM的配置引數也不是一個好對策(注:jdk在32位系統中支援的記憶體不能超過2個G,而在64位中沒有限制,但是在64位的系統中,效能並不是太好),好在POI3.8版本新出來了一個SXSSFWorkb

Java 讀取csv檔案拼sql語句

主要用於sql語句的生成,可以舉一反三來做點其他事情。。。。 public static void main(String[] args) { String oracleSql="insert into 表名 "+"(id,欄位1,欄位2) values(%v)"; Stri

手把手教你如何用Python從PDF檔案匯出資料(附連結)

有很多時候你會想用Python從PDF中提取資料,然後將其匯出成其他格式。不幸的是,並沒有多少Python包可以很好的執行這部分工作。在這篇貼子中,我們將探討多個不同的Python包,並學習如何從PDF中提取某些圖片。儘管在Python中沒有一個完整的解決方案,你還是應該能夠運用這裡的技能開始上手。