最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文秒懂通過JavaCSV類庫讀寫CSV文件的技巧

 更新時(shí)間:2021年05月13日 10:24:46   作者:異常編程  
本文給大家推薦第三方工具庫 JavaCSV,用來造一些 csv 測試數(shù)據(jù)文件,使用超級方便,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

一、背景

小哈公司最近準(zhǔn)備開發(fā)一套新的平臺,具體什么平臺,因?yàn)樯婷?,這里就不透露了。平臺在最終的的技術(shù)選型中,其中主要依賴的技術(shù)棧是 Apache Flink, 一款 Apache 基金會(huì)開源的流處理框架,平臺的核心業(yè)務(wù)都會(huì)交給 Flink 去處理,其中包括離線批量任務(wù)計(jì)算,以及實(shí)時(shí)任務(wù)計(jì)算。

PS: 后面小哈也會(huì)分享一些 Flink 相關(guān)的文章,正在考慮要不要立個(gè) Flag, 出一套 Flink 的入門教程系列文章,主要怕自己太懶了,潑出去的水,收不回來,那就尷尬了~ 🤣

然后呢?和這篇文章的主題啥關(guān)系?

哎,別急,聽我娓娓道來!主要是我們部門也是第一次接觸 Flink, 雖然久聞大名,知道其計(jì)算性能極為出眾,但是耳聽為虛,一番性能測試是是避免不的。

于是,小哈以離線場景為例,模擬實(shí)際業(yè)務(wù)數(shù)據(jù),輸入源為 csv 編碼文件針對不同量級的數(shù)據(jù),100w, 1000w, 一億的數(shù)據(jù)量做測試,分別看看不同維度的性能指標(biāo),如執(zhí)行耗時(shí)、CPU、內(nèi)存、吞吐量等。

PS: 因?yàn)樾」吘共皇菍I(yè)的測試人員,這里只是做了一些簡單的測試,對 Flink 的性能有個(gè)大致的認(rèn)知即可。小伙伴們?nèi)绻行枰?,可以使用專門的大數(shù)據(jù)測試工具,如 HiBench。

這里貼一篇美團(tuán)技術(shù)團(tuán)隊(duì)出品的文章《流計(jì)算框架 Flink 與 Storm 的性能對比》,有興趣的小伙伴可以看下:

https://tech.meituan.com/2017/11/17/flink-benchmark.html

好了,鋪墊了這么多,其實(shí)是想水文一篇,沒啥技術(shù)含量,就是給大家推薦第三方工具庫 JavaCSV,用來造一些 csv 測試數(shù)據(jù)文件,個(gè)人覺得它非常地優(yōu)雅方便 (比較偷懶~ 代碼量少~)。

JavaCSV 官網(wǎng)地址:https://sourceforge.net/projects/javacsv/

JavaCSV API 說明文檔:http://javacsv.sourceforge.net/

二、開始

2.1 添加 Maven 依賴

<dependency>
    <groupId>net.sourceforge.javacsv</groupId>
    <artifactId>javacsv</artifactId>
    <version>2.0</version>
</dependency>

2.2 寫文件

要如何通過 javacsv生成 CSV 文件呢?參考下面的示例代碼:

/**
 * @author 犬小哈(公眾號:小哈學(xué)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) {
        // 創(chuàng)建 CSV Writer 對象, 參數(shù)說明(寫入的文件路徑,分隔符,編碼格式)
        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);
    }
}

通過上面的示例代碼,我們就可以很輕松地造一批測試數(shù)據(jù),只需要改下需要生成的行數(shù)即可。相比較其他的庫,代碼量還是非常少的。

運(yùn)行代碼,看下最終的效果圖:

2.1 讀文件

說完了如何通過 javacsv來寫 csv 文件,再來說說如何讀取 csv 文件,就以上面生成的 csv 文件作為讀取源,示例代碼如下:

/**
 * @author 犬小哈(公眾號:小哈學(xué)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) {
        // 緩存讀取的數(shù)據(jù)
        List<String[]> content = new ArrayList<>();

        try {
            // 創(chuàng)建 CSV Reader 對象, 參數(shù)說明(讀取的文件路徑,分隔符,編碼格式)
            CsvReader csvReader = new CsvReader(readCsvFilePath, ',', Charset.forName("GBK"));
            // 跳過表頭
            csvReader.readHeaders();

            // 讀取除表頭外的內(nèi)容
            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 列的數(shù)據(jù)
                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);
    }
}

運(yùn)行代碼,看下控制臺打印效果:

打完收工~

總結(jié)

本文小哈主要帶著大家了解了一下,如何通過第三方庫 JavaCSV來對 csv 文件進(jìn)行讀寫操作,實(shí)際場景中可能應(yīng)用并不廣泛,更多還是使用統(tǒng)一的文件庫,如阿里的 EasyExcel,EasyPOI 等, 小哈這里使用,也僅僅是為了造測試數(shù)據(jù)而已。

PS: 關(guān)于 EasyExcel 使用教程, 小伙伴可以看下小哈之前寫的一篇文章:《7 行代碼優(yōu)雅地實(shí)現(xiàn) Excel 文件生成&下載功能》

好了,水文結(jié)束,小伙伴們覺得有幫助記得點(diǎn)個(gè)再看哈~ 感謝感謝~ 下期見~

Ref

https://sourceforge.net/projects/javacsv/

http://javacsv.sourceforge.net/

https://blog.csdn.net/StemQ/article/details/60780859?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

到此這篇關(guān)于一文秒懂通過JavaCSV類庫讀寫CSV文件的技巧的文章就介紹到這了,更多相關(guān)JavaCSV類庫讀寫CSV文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于LinkedHashMap實(shí)現(xiàn)LRU緩存

    基于LinkedHashMap實(shí)現(xiàn)LRU緩存

    LinkedHashMap是Java集合中一個(gè)常用的容器,它繼承了HashMap, 是一個(gè)有序的Hash表。那么該如何基于LinkedHashMap實(shí)現(xiàn)一個(gè)LRU緩存呢?本文將介紹LinkedHashMap的實(shí)現(xiàn)原理,感興趣的同學(xué)可以參考一下
    2023-05-05
  • Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行

    Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行

    這篇文章主要介紹了Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java的動(dòng)態(tài)綁定與雙分派_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java的動(dòng)態(tài)綁定與雙分派_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java的動(dòng)態(tài)綁定與雙分派,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java設(shè)計(jì)模式之模板方法詳解

    Java設(shè)計(jì)模式之模板方法詳解

    模板方法的概念:定義了一個(gè)操作中的算法的骨架,而將部分步驟的實(shí)現(xiàn)在子類中完成。模板方法模式使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟
    2022-07-07
  • 實(shí)例講解JAVA設(shè)計(jì)模式之備忘錄模式

    實(shí)例講解JAVA設(shè)計(jì)模式之備忘錄模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之備忘錄模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 詳解Java集合類之Map篇

    詳解Java集合類之Map篇

    這篇文章主要為大家詳細(xì)介紹一下Java集合類中Map的用法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-07-07
  • Spring + Spring Boot + MyBatis + MongoDB的整合教程

    Spring + Spring Boot + MyBatis + MongoDB的整合教程

    這篇文章主要給大家介紹了關(guān)于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-12-12
  • Swagger2配置方式(解決404報(bào)錯(cuò))

    Swagger2配置方式(解決404報(bào)錯(cuò))

    這篇文章主要介紹了Swagger2配置方式(解決404報(bào)錯(cuò)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Vue中computed計(jì)算屬性和data數(shù)據(jù)獲取方式

    Vue中computed計(jì)算屬性和data數(shù)據(jù)獲取方式

    這篇文章主要介紹了Vue中computed計(jì)算屬性和data數(shù)據(jù)獲取方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 支持生產(chǎn)阻塞的Java線程池

    支持生產(chǎn)阻塞的Java線程池

    在各種并發(fā)編程模型中,生產(chǎn)者-消費(fèi)者模式大概是最常用的了。在實(shí)際工作中,對于生產(chǎn)消費(fèi)的速度,通常需要做一下權(quán)衡
    2014-04-04

最新評論

淮阳县| 如东县| 铜陵市| 济源市| 紫金县| 灵山县| 乌鲁木齐县| 离岛区| 米泉市| 华蓥市| 济源市| 临清市| 原阳县| 宝丰县| 松阳县| 维西| 永善县| 巫山县| 广东省| 定远县| 银川市| 苍山县| 遂昌县| 峨眉山市| 焦作市| 苗栗县| 江陵县| 南涧| 尤溪县| 香港| 丹棱县| 长乐市| 正安县| 务川| 微山县| 陆良县| 白山市| 望城县| 盐池县| 涿鹿县| 灵宝市|