使用注解实现 bean 转 csv
csv 文件是
aaa,bbb,ccc
aaa,bbb,ccc
保存
这里的要求是 List<T> 线性表的类型 转换成 类别似 html 中 table的格式,即第一行是 head 后面是 body
使用注解的效果例如以下 :
List<User> users=new ArrayList<User>();
users.add(new User("刘夏楠", 23, "男"));
users.add(new User("刘夏楠", 23, "男"));
users.add(new User("刘夏楠", 23, "男")); writeBeanToCsvFile("D:\\test.csv", users);
csv文件:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGNtZHk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
当中bean user 例如以下:
package bean; import annotation.csvField; public class User { @csvField("姓名") private String name;
@csvField("年龄")private Integer age;
private String sex; public User(String name, Integer age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
} }
达到的效果就是
拥有 @csvField 注解的字段才会被 写入csv文件
而且 @csvField 的值作为csv文件的 title 即 第一行
我们使用反射来达到这个效果
bean 转 List<String[]> 例如以下:
private static <T> List<String[]> getStringArrayFromBean(List<T> beans) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
if(beans.size()<1)
throw new IllegalArgumentException("长度不能小于1"); List<String[]> result=new ArrayList<String[]>();
Class<? extends Object> cls=beans.get(0).getClass();//获取泛型类型
Field[] declaredFields=cls.getDeclaredFields();
List<Field> annoFields=new ArrayList<Field>();
for(int i=0;i<declaredFields.length;i++){//筛选出拥有注解的字段
csvField anno=declaredFields[i].getAnnotation(csvField.class);//获取注解
if(anno!=null)
annoFields.add(declaredFields[i]);
}
String[] title=new String[annoFields.size()]; for(int i=0;i<annoFields.size();i++){
title[i]=declaredFields[i].getAnnotation(csvField.class).value();//获取注解的值
}
result.add(title); for(T each:beans){
String[] item=new String[annoFields.size()];
for(int i=0;i<annoFields.size();i++){
String fieldName=annoFields.get(i).getName();
String methodName="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); Method method=each.getClass().getMethod(methodName, null);
String val=method.invoke(each, null).toString();
item[i]=val;
}
result.add(item);
}
return result;
}
然后使用 csv 的一个工具包 javacsv.jar来写入csv文件
public static <T> void writeBeanToCsvFile(String csvFilePath,List<T> beans) throws IOException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
File file =new File(csvFilePath);
if(!file.exists()){ //假设文件不存在,创建文件
file.createNewFile();
}
CsvWriter wr =new CsvWriter(csvFilePath,',', Charset.forName("GBK"));
List<String[]> contents=getStringArrayFromBean(beans);
for(String[] each:contents){
wr.writeRecord(each);
}
wr.close();
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
使用注解实现 bean 转 csv的更多相关文章
- 基于注解的bean配置
基于注解的bean配置,主要是进行applicationContext.xml配置.DAO层类注解.Service层类注解. 1.在applicationContext.xml文件中配置信息如下 &l ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- SpringMVC自动扫描@Controller注解的bean
若要对@Controller注解标注的bean进行自动扫描,必须将<context:component-scan base-package="包路径.controller"/ ...
- 开涛spring3(12.3) - 零配置 之 12.3 注解实现Bean定义
12.3 注解实现Bean定义 12.3.1 概述 前边介绍的Bean定义全是基于XML方式定义配置元数据,且在[12.2注解实现Bean依赖注入]一节中介绍了通过注解来减少配置数量,但并没有完全 ...
- 开涛spring3(12.2) - 零配置 之 12.2 注解实现Bean依赖注入
12.2 注解实现Bean依赖注入 12.2.1 概述 注解实现Bean配置主要用来进行如依赖注入.生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的 ...
- (转)Spring注解完成Bean的定义
使用Spring注解完成Bean的定义 2010-04-21 16:48:54| 分类: spring|举报|字号 订阅 下载LOFTER客户端 通过@Autowired或@Reso ...
- Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等
实验1:配置通过静态工厂方法创建的bean [通过静态方法提供实例对象,工厂类本身不需要实例化!] 1.创建静态工厂类 public class StaticFactory { private st ...
- (转)java之Spring(IOC)注解装配Bean详解
java之Spring(IOC)注解装配Bean详解 在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...
- 通过注解配置Bean
之前说的三种配置方式,都是使用XML配置,现在我们说说使用注解配置Bean. 这部分内容主要分为两个部分:使用注解配置Bean,使用注解配置Bean属性. 在classpath中扫描组件 组件扫描:S ...
随机推荐
- QT在构造函数中退出程序
原地址:http://www.tuicool.com/articles/RZnYze 在QT的界面类的构造过程中,如果想退出整个程序,暴力的做法是调用exit(-1)进行,另外一种不是那么暴力的方式如 ...
- Delphi + Asm - TBits类的学习
技术交流,DH讲解. 在D2010的classes中有个TBits类,这个类主要是位操作的. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 TBits = class privat ...
- jQuery EasyUI API 中文文档 - 分隔按钮(splitbutton)
<html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...
- Inverse Quadratic Interpolation (website)
Inverse Quadratic Interpolation: https://www.youtube.com/watch?v=0H7mVPTLF7Q : https://www.youtube. ...
- android布局margin和padding差异!
事实上从使用的时候就能够差别开来. android:padding android:layout_margin padding是在本控件级别的,而margin是在layout级别的. 最好拿有背景的控 ...
- Android 事件处理
目的:通过全面的分析Android的鼠标和键盘事件.了解Android中如何接收和处理键盘和鼠标事件,以及如何用代码来产生事件. 主要学习内容: 1. 接收并处理鼠标事件:按下.弹起.移动.双击.长按 ...
- ANDROID自定义视图——onMeasure流程,MeasureSpec详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置 3. ...
- Java中@Deprecated、@SupressWarning、@Override的作用
Annotation注解在 Java 中有着很广泛的,他是做为一种标识 为javac所识别.每一个注解 都对应这一个Java类 在java.lang包中 有三个注解 分别是 Deprecated ...
- Vmware linux 安装 Vmware Tools 提示只读
在Vmware 虚拟机里安装完linux ,安装Vmware Tools,的时候会提示只读问题,是因为在安装 Vmware Tools 使用的是光盘挂在,光盘为只读文件,所以没有办法再光盘上直接的解压 ...
- python实现PKCS5Padding
python实现PKCS5Padding python实现PKCS5Padding 2008-09-21 请参考 ssl-3-padding-mode php的加密函 ...