欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java導(dǎo)出csv格式文件的方法

 更新時(shí)間:2020年12月31日 11:20:39   作者:齊華楓  
這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出csv格式文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java導(dǎo)出csv格式文件的具體代碼,供大家參考,具體內(nèi)容如下

導(dǎo)出csv格式文件的本質(zhì)是導(dǎo)出以逗號(hào)為分隔的文本數(shù)據(jù)

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.net.URLEncoder; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 

import javax.servlet.http.HttpServletResponse; 

import com.alibaba.druid.util.StringUtils;
 

 
/** 
 * 文件操作 
 */ 
public class CSVUtils { 
 
 
 /**
 * 功能說(shuō)明:獲取UTF-8編碼文本文件開頭的BOM簽名。
 * BOM(Byte Order Mark),是UTF編碼方案里用于標(biāo)識(shí)編碼的標(biāo)準(zhǔn)標(biāo)記。例:接收者收到以EF BB BF開頭的字節(jié)流,就知道是UTF-8編碼。
 * @return UTF-8編碼文本文件開頭的BOM簽名
 */
 public static String getBOM() {

   byte b[] = {(byte)0xEF, (byte)0xBB, (byte)0xBF};
   return new String(b);
 }
 
 /** 
 * 生成CVS文件
 * @param exportData 
 *  源數(shù)據(jù)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.mkdirs(); 
  } 
  //定義文件名格式并創(chuàng)建 
  csvFile =new File(outPutPath+fileName+".csv");
  file.createNewFile(); 
  // UTF-8使正確讀取分隔符"," 
  //如果生產(chǎn)文件亂碼,windows下用gbk,linux用UTF-8
  csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( 
  csvFile), "UTF-8"), 1024); 
  
  //寫入前段字節(jié)流,防止亂碼
  csvFileOutputStream.write(getBOM());
  // 寫入文件頭部
  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(); 
  // 寫入文件內(nèi)容 
  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(); 
   String str=row!=null?((String)((Map)row).get( propertyEntry.getKey())):"";

   if(StringUtils.isEmpty(str)){
    str="";
   }else{
    str=str.replaceAll("\"","\"\"");
    if(str.indexOf(",")>=0){
     str="\""+str+"\"";
    }
   }
   csvFileOutputStream.write(str); 
   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; 
 } 
 
 /**
 *  生成并下載csv文件
 * @param response
 * @param exportData
 * @param map
 * @param outPutPath
 * @param fileName
 * @throws IOException
 */
 @SuppressWarnings("rawtypes")
 public static void exportDataFile(HttpServletResponse response,List exportData, LinkedHashMap map, String outPutPath,String fileName) throws IOException{
  File csvFile = null; 
  BufferedWriter csvFileOutputStream = null; 
  try { 
   File file = new File(outPutPath); 
   if (!file.exists()) { 
   file.mkdirs(); 
   } 
   //定義文件名格式并創(chuàng)建 
   csvFile =new File(outPutPath+fileName+".csv");
   if(csvFile.exists()){
    csvFile.delete(); 
   }
   csvFile.createNewFile(); 
   // UTF-8使正確讀取分隔符"," 
   //如果生產(chǎn)文件亂碼,windows下用gbk,linux用UTF-8
   csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"), 1024); 
   //寫入前段字節(jié)流,防止亂碼
   csvFileOutputStream.write(getBOM());
   // 寫入文件頭部 
   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(); 
   // 寫入文件內(nèi)容 
   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(); 
    String str=row!=null?((String)((Map)row).get( propertyEntry.getKey())):"";
    if(StringUtils.isEmpty(str)){
     str="";
    }else{
     str=str.replaceAll("\"","\"\"");
     if(str.indexOf(",")>=0){
      str="\""+str+"\"";
     }
    }
    csvFileOutputStream.write(str); 
    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(); 
   } 
  } 
  
  
  
  
  InputStream in = null; 
  try { 
   in = new FileInputStream(outPutPath+fileName+".csv"); 
   int len = 0; 
   byte[] buffer = new byte[1024]; 
   
   OutputStream out = response.getOutputStream(); 
   response.reset(); 
   
   response.setContentType("application/csv;charset=UTF-8"); 
   response.setHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(fileName+".csv", "UTF-8")); 
   response.setCharacterEncoding("UTF-8"); 
   while ((len = in.read(buffer)) > 0) { 
   out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); 
   out.write(buffer, 0, len); 
   }
   out.close();
  } catch (FileNotFoundException e) { 
  } finally { 
   if (in != null) { 
   try { 
    in.close(); 
   } catch (Exception e) { 
    throw new RuntimeException(e); 
   } 
   } 
  }
  
 }
 
 /** 
 * 刪除該目錄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(); 
  } 
  } 
 } 
 } 
 
 /** 
 * 刪除單個(gè)文件 
 * @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; 
   } 
  } 
  } 
 } 
 } 
 
 /** 
 * 測(cè)試數(shù)據(jù) 
 * @param args 
 */ 
 @SuppressWarnings({ "rawtypes", "unchecked" }) 
 public static void main(String[] args) { 
 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(); 

 //設(shè)置列名
 map.put("1", "第一列名稱"); 
 map.put("2", "第二列名稱"); 
 map.put("3", "第三列名稱"); 
 map.put("4", "第四列名稱"); 
 //這個(gè)文件上傳到路徑,可以配置在數(shù)據(jù)庫(kù)從數(shù)據(jù)庫(kù)讀取,這樣方便一些!
 String path = "E:/"; 

 //文件名=生產(chǎn)的文件名稱+時(shí)間戳
 String fileName = "文件導(dǎo)出"; 
 File file = CSVUtils.createCSVFile(exportData, map, path, fileName); 
 String fileName2 = file.getName(); 
 System.out.println("文件名稱:" + fileName2); 
 } 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java CRM系統(tǒng)用戶登錄功能實(shí)現(xiàn)代碼實(shí)例

    Java CRM系統(tǒng)用戶登錄功能實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Java CRM系統(tǒng)用戶登錄功能實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringMVC+EasyUI實(shí)現(xiàn)頁(yè)面左側(cè)導(dǎo)航菜單功能

    SpringMVC+EasyUI實(shí)現(xiàn)頁(yè)面左側(cè)導(dǎo)航菜單功能

    這篇文章主要介紹了SpringMVC+EasyUI實(shí)現(xiàn)頁(yè)面左側(cè)導(dǎo)航菜單功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • springboot集成redis lettuce

    springboot集成redis lettuce

    目前java操作redis的客戶端有jedis跟Lettuce。本文主要介紹了springboot集成redis lettuce,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • SpringBoot攔截器原理解析及使用方法

    SpringBoot攔截器原理解析及使用方法

    這篇文章主要介紹了SpringBoot攔截器原理解析及使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot如何返回頁(yè)面的實(shí)現(xiàn)方法

    SpringBoot如何返回頁(yè)面的實(shí)現(xiàn)方法

    SpringBoot中使用Controller和頁(yè)面的結(jié)合能夠很好地實(shí)現(xiàn)用戶的功能及頁(yè)面數(shù)據(jù)的傳遞。本文介紹了如何實(shí)現(xiàn)頁(yè)面的返回以及這里面所包含的坑,感興趣的可以了解一下
    2021-07-07
  • 關(guān)于java.math.BigDecimal比較大小問(wèn)題

    關(guān)于java.math.BigDecimal比較大小問(wèn)題

    這篇文章主要介紹了關(guān)于java.math.BigDecimal比較大小問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例

    RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例

    這篇文章主要為大家介紹了RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 合并有序數(shù)組的實(shí)現(xiàn)(java與C語(yǔ)言)

    合并有序數(shù)組的實(shí)現(xiàn)(java與C語(yǔ)言)

    這篇文章主要介紹了合并有序數(shù)組的實(shí)現(xiàn)(java與C語(yǔ)言)的相關(guān)資料,這里對(duì)有序數(shù)組的合并分享了java版本和C語(yǔ)言版本的示例,需要的朋友可以參考下
    2017-08-08
  • 將JavaDoc注釋生成API文檔的操作

    將JavaDoc注釋生成API文檔的操作

    這篇文章主要介紹了將JavaDoc注釋生成API文檔的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JRebel2023.3 插件使用及安裝步驟詳解

    JRebel2023.3 插件使用及安裝步驟詳解

    JRebel是一款JVM插件,它使得Java代碼修改后不用重啟系統(tǒng),立即生效,IDEA上原生是不支持熱部署的,一般更新了 Java 文件后要手動(dòng)重啟 Tomcat 服務(wù)器,才能生效,浪費(fèi)時(shí)間浪費(fèi)生命,目前對(duì)于idea熱部署最好的解決方案就是安裝JRebel插件,本文分步驟介紹的非常詳細(xì),一起看看吧
    2023-08-08

最新評(píng)論