歡迎關注筆者的公衆號: 小哈學Java, 專一於推送 Java 領域優質乾貨文章!!我的博客: https://www.exception.site/essay/how-to-create-read-csv-by-javacsvhtml
小哈公司最近準備開發一套新的平臺,具體什麼平臺,由於涉密,這裏就不透露了。平臺在最終的的技術選型中,其中主要依賴的技術棧是 Apache Flink, 一款 Apache 基金會開源的流處理框架,平臺的核心業務都會交給 Flink 去處理,其中包括離線批量任務計算,以及實時任務計算。java
PS: 後面小哈也會分享一些 Flink 相關的文章,正在考慮要不要立個 Flag, 出一套 Flink 的入門教程系列文章,主要怕本身太懶了,潑出去的水,收不回來,那就尷尬了~ 🤣
而後呢?和這篇文章的主題啥關係?面試
哎,別急,聽我娓娓道來!主要是咱們部門也是第一次接觸 Flink, 雖然久聞大名,知道其計算性能極爲出衆,可是耳聽爲虛,一番性能測試是是避免不的。數據庫
因而,小哈以離線場景爲例,模擬實際業務數據,輸入源爲 csv 編碼文件針對不一樣量級的數據,100w, 1000w, 一億的數據量作測試,分別看看不一樣維度的性能指標,如執行耗時、CPU、內存、吞吐量等。segmentfault
PS: 由於小哈畢竟不是專業的測試人員,這裏只是作了一些簡單的測試,對 Flink 的性能有個大體的認知便可。小夥伴們若是有須要,能夠使用專門的大數據測試工具,如 HiBench。這裏貼一篇美團技術團隊出品的文章《流計算框架 Flink 與 Storm 的性能對比》,有興趣的小夥伴能夠看下:緩存
好了,鋪墊了這麼多,實際上是想水文一篇,沒啥技術含量,就是給你們推薦第三方工具庫 JavaCSV
,用來造一些 csv 測試數據文件,我的以爲它很是地優雅方便 (比較偷懶~ 代碼量少~)。架構
JavaCSV 官網地址:https://sourceforge.net/projects/javacsv/併發
JavaCSV API 說明文檔:http://javacsv.sourceforge.net/框架
<dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency>
要如何經過 javacsv
生成 CSV 文件呢?參考下面的示例代碼:
/** * @author 犬小哈(公衆號:小哈學Java) * @date 2019/4/12 * @time 下午3:05 * @discription 讀寫 csv 文件 **/ public class ReadAndWriterCsvFlie { // 須要寫入的 csv 文件路徑 public static final String WRITE_CSV_FILE_PATH = "/Users/a123123/Work/flink-study/write_test.csv"; /** * 生成 csv 文件 */ public static void writeCsvFile(String writeCsvFilePath) { // 建立 CSV Writer 對象, 參數說明(寫入的文件路徑,分隔符,編碼格式) CsvWriter csvWriter = new CsvWriter(writeCsvFilePath,',', Charset.forName("GBK")); try { // 定義 header 頭 String[] headers = {"訂單號", "用戶名", "支付金額"}; // 寫入 header 頭 csvWriter.writeRecord(headers); // 寫入一千條記錄 for (int i = 0; i < 1000; i++) { String orderNum = UUID.randomUUID().toString(); String userName = "用戶" + i; String payMoney = String.valueOf(i); // 寫入行 csvWriter.writeRecord((String[]) Arrays.asList(orderNum, userName, payMoney).toArray()); } } catch (Exception e) { e.printStackTrace(); } finally { csvWriter.close(); } } public static void main(String[] args) { writeCsvFile(WRITE_CSV_FILE_PATH); } }
經過上面的示例代碼,咱們就能夠很輕鬆地造一批測試數據,只須要改下須要生成的行數便可。相比較其餘的庫,代碼量仍是很是少的。
運行代碼,看下最終的效果圖:
說完了如何經過 javacsv
來寫 csv 文件,再來講說如何讀取 csv 文件,就以上面生成的 csv 文件做爲讀取源,示例代碼以下:
/** * @author 犬小哈(公衆號:小哈學Java) * @date 2019/4/12 * @time 下午3:05 * @discription 讀寫 csv 文件 **/ public class ReadAndWriterCsvFlie { // 須要寫入的 csv 文件路徑 public static final String WRITE_CSV_FILE_PATH = "/Users/a123123/Work/flink-study/write_test.csv"; /** * 讀取 csv 文件 */ public static void readCsvFile(String readCsvFilePath) { // 緩存讀取的數據 List<String[]> content = new ArrayList<>(); try { // 建立 CSV Reader 對象, 參數說明(讀取的文件路徑,分隔符,編碼格式) CsvReader csvReader = new CsvReader(readCsvFilePath, ',', Charset.forName("GBK")); // 跳過表頭 csvReader.readHeaders(); // 讀取除表頭外的內容 while (csvReader.readRecord()) { // 讀取一整行 String line = csvReader.getRawRecord(); System.out.println(line); content.add(csvReader.getValues()); } csvReader.close(); for (int row = 0; row < content.size(); row++) { // 讀取第 row 行,第 0 列的數據 String orderNum = content.get(row)[0]; System.out.println("==> orderNum: " + orderNum); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { readCsvFile(WRITE_CSV_FILE_PATH); } }
運行代碼,看下控制檯打印效果:
打完收工~
本文小哈主要帶着你們瞭解了一下,如何經過第三方庫 JavaCSV
來對 csv 文件進行讀寫操做,實際場景中可能應用並不普遍,更多仍是使用統一的文件庫,如阿里的 EasyExcel,EasyPOI 等, 小哈這裏使用,也僅僅是爲了造測試數據而已。
PS: 關於 EasyExcel 使用教程, 小夥伴能夠看下小哈以前寫的一篇文章: 《7 行代碼優雅地實現 Excel 文件生成&下載功能》
好了,水文結束,小夥伴們以爲有幫助記得點個再看哈~ 感謝感謝~ 下期見~
更多幹貨文章,請關注筆者公衆號: 小哈學Java (ID: xiaoha_java), 專一於分享Java領域乾貨文章, 不限於 BAT 面試題分享,Spring Boot, Spring Cloud, 高併發,JVM, 數據庫,Docker 容器, ELK 等相關知識,另外,關注回覆「資源」,便可獲取全文最熱的 Java 面試&架構學習資源喲~