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

Xavier Pan發表於2020-12-08


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檔案的方法

相關文章