国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

一文秒懂通過(guò)JavaCSV類(lèi)庫讀寫(xiě)CSV文件的技巧

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:異常編程 欄目: 開(kāi)發(fā)技術(shù) 歡迎投稿:712375056

目錄

    一、背景

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

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

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

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

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

    PS: 因為小哈畢竟不是專(zhuān)業(yè)的測試人員,這里只是做了一些簡(jiǎn)單的測試,對 Flink 的性能有個(gè)大致的認知即可。小伙伴們如果有需要,可以使用專(zhuān)門(mén)的大數據測試工具,如 HiBench。

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

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

    JavaCSV 官網(wǎng)地址:

    JavaCSV API 說(shuō)明文檔:

    二、開(kāi)始

    2.1 添加 Maven 依賴(lài)

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

    2.2 寫(xiě)文件

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

    /**
     * @author 犬小哈(公眾號:小哈學(xué)Java)
     * @date 2019/4/12
     * @time 下午3:05
     * @discription 讀寫(xiě) csv 文件
     **/
    public class ReadAndWriterCsvFlie {
    
        // 需要寫(xiě)入的 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 對象, 參數說(shuō)明(寫(xiě)入的文件路徑,分隔符,編碼格式)
            CsvWriter csvWriter = new CsvWriter(writeCsvFilePath,',', Charset.forName("GBK"));
    
            try {
                // 定義 header 頭
                String[] headers = {"訂單號", "用戶(hù)名", "支付金額"};
                // 寫(xiě)入 header 頭
                csvWriter.writeRecord(headers);
    
                // 寫(xiě)入一千條記錄
                for (int i = 0; i < 1000; i++) {
                    String orderNum = UUID.randomUUID().toString();
                    String userName = "用戶(hù)" + i;
                    String payMoney = String.valueOf(i);
    
                    // 寫(xiě)入行
                    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);
        }
    }

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

    運行代碼,看下最終的效果圖:

    2.1 讀文件

    說(shuō)完了如何通過(guò) javacsv來(lái)寫(xiě) csv 文件,再來(lái)說(shuō)說(shuō)如何讀取 csv 文件,就以上面生成的 csv 文件作為讀取源,示例代碼如下:

    /**
     * @author 犬小哈(公眾號:小哈學(xué)Java)
     * @date 2019/4/12
     * @time 下午3:05
     * @discription 讀寫(xiě) csv 文件
     **/
    public class ReadAndWriterCsvFlie {
    
        // 需要寫(xiě)入的 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 {
                // 創(chuàng  )建 CSV Reader 對象, 參數說(shuō)明(讀取的文件路徑,分隔符,編碼格式)
                CsvReader csvReader = new CsvReader(readCsvFilePath, ',', Charset.forName("GBK"));
                // 跳過(guò)表頭
                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);
        }
    }

    運行代碼,看下控制臺打印效果:

    打完收工~

    總結

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

    PS: 關(guān)于 EasyExcel 使用教程, 小伙伴可以看下小哈之前寫(xiě)的一篇文章:

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

    Ref

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

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

    ja
    欧美金发尤物大战黑人| 国产尤物在线视精品在亚洲| 日韩免费高清大片在线| 亚洲h在线播放在线观看h| 最好的中文字幕视频2019完整版| 海角国精产品一区一区三区糖心|