国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于 java 注解的 csv 文件讀寫框架

Gemini / 1066人閱讀

摘要:基于注解生成加簽驗簽。是否寫入頭,建議第一次寫入指定,避免中文亂碼指定文件編碼默認不進行字段排序無待寫入的文件列表方法默認值說明必填創建實例,并且指定待讀取文件路徑。

csv

基于 java 注解生成加簽驗簽 csv。

開源地址: github csv
)

創作原由

以前覺得 csv 文件的多寫非常簡單,就懶得封裝。

最近一個月寫了兩次 csv 文件相關的東西,發現要處理的細節還是有的,還浪費比較多的時間。

比如:

UTF-8 中文編碼使用 excel 打開亂碼,因為缺少 BOM 頭。

不同類型字段轉化為字符串,順序的指定,head 頭的指定,如果手寫都會很繁瑣。

讀取的時候最后 , 后無元素,split 會缺失等。

為了解決上述問題,此框架應運而生。

特性

Fluent 流式寫法

基于 java 注解

字段類型轉換的靈活支持,內置 8 大基本類型以及 String 類型轉換

快速開始 環境

jdk7+

maven 3.x

maven 引入

    com.github.houbb
    csv
    0.0.2
示例代碼

User.java

演示基本類型的轉換

public class User {

    private String name;

    private int age;

    private float score;

    private double money;

    private boolean sex;

    private short level;

    private long id;

    private char status;

    private byte coin;

    //Getter & Setter & toString()
}

對象列表構建

    /**
     * 構建通用測試列表
     * @return 列表
     */
    private List buildCommonList() {
        User user = new User();
        short s = 4;
        byte b = 1;
        user.age(10)
        .name("你好")
        .id(1L)
        .score(60)
        .coin(b)
        .level(s)
        .money(200)
        .sex(true)
        .status("Y");
        return Arrays.asList(user);
    }
寫入

測試代碼

public void commonTest() {
    final String path = "src	est
esourcescommon.csv";
    CsvWriteBs.newInstance(path)
            .write(buildCommonList());
}

文件生成

name,age,score,money,sex,level,id,status,coin
你好,10,60.0,200.0,true,4,1,Y,1
讀取
public void commonTest() {
    final String path = "src	est
esourcescommon.csv";
    List userList = CsvReadBs.newInstance(path)
            .read(User.class);
    System.out.println(userList);
}

日志信息

[User{name="你好", age=10, score=60.0, money=200.0, sex=true, level=4, id=1, status=Y, coin=1}]
CSV 引導類

為了用戶使用的便利性,和后期拓展的靈活性。

引導類

CSV 有兩個引導類:

名稱 作用
CsvWriteBs csv 文件寫入引導類
CsvReadBs csv 文件讀取引導類
CsvWriteBs
方法 默認值 說明
newInstance(final String path) 必填 創建實例,并且指定待寫入文件路徑。
writeBom(boolean writeBom) true 是否寫入 UTF8 BOM 頭,建議第一次寫入指定,避免中文亂碼
charset(String charset) UTF-8 指定文件編碼
sort(ISort sort) NoSort 默認不進行字段排序
write(List list) 待寫入的文件列表
CsvReadBs
方法 默認值 說明
newInstance(final String path) 必填 創建實例,并且指定待讀取文件路徑。
charset(String charset) UTF-8 指定文件編碼
sort(ISort sort) NoSort 默認不進行字段排序
startIndex(int startIndex) 1 文件的第二行,默認第一行是 head
endIndex(int endIndex) 文件的最后一行
Csv 注解 注解屬性說明

用于待處理對象的字段上。

    /**
     * 字段顯示名稱
     * 1. 默認使用 field.name
     * @return 顯示名稱
     */
    String label() default "";

    /**
     * 讀取是否需要
     * @return 是
     */
    boolean readRequire() default true;

    /**
     * 寫入是否需要
     * @return 是
     */
    boolean writeRequire() default true;

    /**
     * 讀取轉換
     * @return 處理實現類
     */
    Class readConverter() default CommonReadConverter.class;

    /**
     * 寫入轉換
     * @return 處理實現類
     */
    Class writeConverter() default StringWriteConverter.class;
屬性概覽表
屬性 默認值 說明
label 字段名稱 用于 csv 頭生成
readRequire true 是否需要從 csv 文件讀取
writeRequire true 當前字段是否需要寫入 csv 文件
readConverter CommonReadConverter 將 csv 中的字符串轉化為當前字段類型,支持 8 大基本類型+String
writeConverter StringWriteConverter 直接調用當前字段值 toString() 方法,null 直接為空字符串

其中 readConverter/writeConverter 支持用戶自定義

注解使用代碼示例 對象定義
public class UserAnnotation {

    @Csv(label = "名稱")
    private String name;

    @Csv(label = "密碼", readRequire = false, writeRequire = false)
    private String password;

    @Csv(label = "生日", readConverter = ReadDateConvert.class, writeConverter = WriteDateConvert.class)
    private Date birthday;

    //Getter & Setter & toString()
}
ReadDateConvert/WriteDateConvert

使我們自定義的針對 Date 的轉換實現。

Write

public class WriteDateConvert implements IWriteConverter {

    @Override
    public String convert(Date value) {
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        return dateFormat.format(value);
    }

}

ReadDateConvert

public class ReadDateConvert implements IReadConverter {

    @Override
    public Date convert(String value, Class fieldType) {
        try {
            DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
            return dateFormat.parse(value);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

}
寫入文件
public void annotationTest() {
    final String path = "src	est
esourcesannotation.csv";
    CsvWriteBs.newInstance(path)
            .write(buildAnnotationList());
}

其中列表構建:

/**
 * 構建基于注解的測試列表
 * @return 列表
 */
private List buildAnnotationList() {
    UserAnnotation user = new UserAnnotation();
    user.name("你好")
            .password("123")
            .birthday(new Date());
    return Arrays.asList(user);
}

生成文件內容

名稱,生日
你好,20190603
讀取文件測試
public void annotationTest() {
     final String path = "src	est
esourcesannotation.csv";
     List userList = CsvReadBs.newInstance(path)
             .read(UserAnnotation.class);
     System.out.println(userList);
}

日志信息

[UserAnnotation{name="你好", password="null", birthday=Mon Jun 03 00:00:00 CST 2019}]

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74784.html

相關文章

  • 基于 java 注解 csv 讀寫框架更加簡單靈活

    摘要:創作原由以前覺得文件的讀寫非常簡單,就懶得封裝。為了解決上述問題,此框架應運而生。寫入文件其中列表構建構建基于注解的測試列表列表你好生成文件內容名稱生日你好讀取文件測試日志信息你好集合類有時候對象中會包含數組等常見集合。 CSV 基于 java 注解的 csv 讀寫框架。 相關框架 Apache commons-csv super-csv 簡單看了下,這兩個框架提供的特性都非常的基礎。...

    includecmath 評論0 收藏0
  • CSV-03- csv 讀寫框架支持數組、Map、Collection 等常見集合

    摘要:集合類有時候對象中會包含數組等常見集合。為了存儲的便利性,默認提供集合的相關支持。特性和普通字段保持一致,如果指定注解轉換,則以注解為準。集合使用進行分隔,其中的分隔,用到了。在使用時要注意,不要包含上述的符號,否則會出現解析錯亂。 集合類 有時候對象中會包含數組、Map、Collection 等常見集合。 為了存儲的便利性,默認提供集合的相關支持。 特性和普通字段保持一致,如果指定注...

    leiyi 評論0 收藏0
  • Python之使用Pandas庫實現MySQL數據庫讀寫

    摘要:本次分享將介紹如何在中使用庫實現數據庫的讀寫。提供了工具包及對象關系映射工具,使用許可證發行。模塊實現了與不同數據庫的連接,而模塊則使得能夠操作數據庫。 ??本次分享將介紹如何在Python中使用Pandas庫實現MySQL數據庫的讀寫。首先我們需要了解點ORM方面的知識。 ORM技術 ??對象關系映射技術,即ORM(Object-Relational Mapping)技術,指的是把關...

    darcrand 評論0 收藏0

發表評論

0條評論

Gemini

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<