1. 程式人生 > 其它 >java快速實現匯出生成csv檔案(含註釋程式碼)

java快速實現匯出生成csv檔案(含註釋程式碼)

技術標籤:Java資料庫資料庫javacsvexcel

目錄


java快速實現匯出生成csv檔案(含註釋程式碼)

在java中我們一般使用poi操作匯入、匯出excel,但是poi很消耗記憶體,尤其在匯出時。這個時候我們其實可以選擇匯出生成csv檔案,因為csv本質上就是文字檔案,所以效率很高。


文字檔案 -> csv

csv,即逗號分隔檔案。要生成csv檔案,只需生成逗號分隔的txt檔案,然後修改後綴名為.csv即可。

生成的文字檔案:
txt檔案

修改後綴名後的.csv檔案:

csv檔案


實現程式碼

實現類

/**
   *         匯出生成csv格式的檔案
   * @author     https://www.jb51.net/article/102607.htm
   * @param      titles csv格式頭文
   * @param      propertys 需要匯出的資料實體的屬性,注意與title一一對應
   * @param      list 需要匯出的物件集合
   * @return
   * @throws     IOException
   * Created     2017年1月5日 上午10:51:44
   * @throws     IllegalAccessException 
   * @throws     IllegalArgumentException 
   */
public static <T> String exportCsv(String[] titles,String[] propertys,List<T> list) throws IOException, IllegalArgumentException, IllegalAccessException{ File file = new File("d:\\test.csv"); //構建輸出流,同時指定編碼 OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream
(file), "gbk"); //csv檔案是逗號分隔,除第一個外,每次寫入一個單元格資料後需要輸入逗號 for(String title : titles){ ow.write(title); ow.write(","); } //寫完檔案頭後換行 ow.write("\r\n"); //寫內容 for(Object obj : list){ //利用反射獲取所有欄位 Field[] fields = obj.getClass().getDeclaredFields(); for(String property : propertys){ for(Field field : fields){ //設定欄位可見性 field.setAccessible(true); if(property.equals(field.getName())){ ow.write(field.get(obj).toString()); ow.write(","); continue; } } } //寫完一行換行 ow.write("\r\n"); } ow.flush(); ow.close(); return "0"; }

測試類

public void test() throws IOException, IllegalArgumentException, IllegalAccessException{
    String[] titles = new String[]{"ID","姓名"};
    String[] propertys = new String[]{"id","name"};
    List<User> list = new ArrayList<User>();
    User user;
    user = new User();
    user.setId(1L);
    user.setName("張三");
    list.add(user);
    user = new User();
    user.setId(2L);
    user.setName("李四");
    list.add(user);
    CsvUtil.getInstance().exportCsv(titles,propertys, list);
  }

生成的檔案就是上文這兩張圖


參考列表

java匯出生成csv檔案的方法