java反射学习之二万能EXCEL导出

一、EXCEL导出的实现过程

  假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性;那么我们实现的方式是这样的:

  循环这个集合,在循环集合中某个对象的所有属性,将这个对象的所有属性作为EXCEL的列,该对象占据EXCEL的一行

二、万能EXCEL导出(以JXL为例,jxl、poi等excel导入导出的jar包不做介绍了)

  1、创建java工程、引入jxl的jar包

  2、直接上代码

    Book.java

    

/**
 * Book对象
 * @author bwy
 *
 */
public class Book {
    private String name;
    private double price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Book(String name, double price) {
        this.name = name;
        this.price = price;
    }

}

    excel工具类ExcelUtil.java

 1 /**
 2  * EXCEL工具类
 3  *
 4  * @author bwy
 5  *
 6  */
 7 public class ExcelUtil {
 8
 9     /**
10      * excel导出方法
11      *
12      * @param list
13      *            导出的对象集合
14      * @param filePath
15      *            导出路径
16      */
17     @SuppressWarnings("rawtypes")
18     public static void exportExcel(ArrayList list, String filePath) {
19
20         // 创建workbook对象
21         WritableWorkbook workBook = null;
22
23         // sheet对象
24         WritableSheet sheet = null;
25         try {
26             workBook = Workbook.createWorkbook(new File(filePath));
27             sheet = workBook.createSheet("book", 0);
28
29             // 循环该对象的集合
30             for (int i = 0; i < list.size(); i++) {
31
32                 // 获取对象
33                 Object obj = list.get(i);
34
35                 // 获取对象的类
36                 Class cls = obj.getClass();
37
38                 // 获取该类的所有属性
39                 Field[] fis = cls.getDeclaredFields();
40
41                 // 循环类属性
42                 for (int j = 0; j < fis.length; j++) {
43
44                     // 设置私有属性访问权限,这一步很重要
45                     fis[j].setAccessible(true);
46
47                     // 创建label
48                     Label label = new Label(j, i, fis[j].get(obj).toString());
49
50                     // 放入到sheet中
51                     sheet.addCell(label);
52                 }
53             }
54
55             // 写文件
56             workBook.write();
57         } catch (Exception e) {
58             e.printStackTrace();
59         } finally {
60
61             // 关闭流
62             try {
63                 workBook.close();
64             } catch (WriteException e) {
65                 e.printStackTrace();
66             } catch (IOException e) {
67                 e.printStackTrace();
68             }
69         }
70     }
71 }

    最后是测试类  ExcelExportTest.java

 1 public class ExcelExportTest {
 2     public static void main(String[] args) {
 3         Book b1 = new Book("我和凤姐同居的日子",32.00);
 4         Book b2 = new Book("HTML5开发手册",18.00);
 5         Book b3 = new Book("thiking in java",90.0);
 6         Book b4 = new Book("数据结构",22);  
 7         Book b5 = new Book("毛 泽 东思想",10);
 8
 9         ArrayList<Book> bookList = new ArrayList<Book>();
10         bookList.add(b1);
11         bookList.add(b2);
12         bookList.add(b3);
13         bookList.add(b4);
14         bookList.add(b5);
15
16         ExcelUtil.exportExcel(bookList,"c:/export.xls");
17     }
18 }

  运行测试类,可以看到,在C盘根目录生成了export.xls文件

  当然,这个导出的功能不是最完善的,只是通过这一功能去了解java反射的使用。

时间: 2024-10-11 22:29:12

java反射学习之二万能EXCEL导出的相关文章

Java Web学习(二) Eclipse的配置

Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后根据windows系统32位或64位,进行选择(建议64位).如果你的机器内存过小,可以选择Eclipse的旧版本:Eclipse Indigo .Eclipse Juno . Eclipse Kepler 等版本. 2.解压缩安装 打开压缩包,将里面的Eclipse 拖出到指定位置,进行解压缩.

Java 反射理解(二)-- 动态加载类

Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 演示 我们以具体的代码来演示什么是动态加载类和静态加载类: 新建:Office.java: class Office { public static void main(String[] args) { // new 创建对象,是静态加载类,在编译时刻就需

Java并发学习之二——获取和设置线程信息

本文是学习网络上的文章时的总结,感谢大家无私的分享. Thread类的对象中保存了一些属性信息能够帮助我们辨别每一个线程,知道它的一些信息 ID:每个线程的独特标示: Name:线程的名称: Priority:线程对象的优先级.优先级别在1-10之间,1是最低级,10是最高级. Status:线程状态.在java中,线程只有6种状态:new,runnable,blocked,waiting,time waiting 或terminated. 现在写一个程序,将线程的信息保存到文件中方便查看 pa

Java反射学习总结

广州疯狂软件教育Java培训,iOS培训分享Class类是Reflection API中核心的类,他位于java.lang.Class列出一些常用的方法.- getName() : 获得类的完整名字- getFields() : 获得类的public类型的属性- getDeclaredFields() : 获得类的所有属性- getMethods() : 获得类的public类型的方法- getDeclaredMethods() : 获得类的所有方法- getMethod(String name

Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. http://blog.csdn.net/a396901990/article/category/2302221 本文介绍了如何利用反射和注解去简单的模拟JUnit4单元测试框架,之所以选择JUnit4是因为4.0以后最大的改进就是使用了注解.需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程.所以本文的主要目的是介绍反射和注解的使用.废话不多说,直接进入正文

从零开始学习jQuery (二) 万能的选择器

原文:从零开始学习jQuery (二) 万能的选择器 本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习jQuery (七) jQuery动画-让页面动起来! 从零开始学习jQuery

Java反射学习总结四(动态代理使用实例和内部原理解析)

通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加相应的代理类.解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能或者说去动态的生成这个代理类,那么此时就必须使用动态代理完成. 动态代理知识点: Java动态代理类位于java.lang.reflect包下,主要有以下一个接口和一个类: 1.InvocationHandler接口:    

Java基础学习笔记二十三 Java核心语法之反射

类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 链接指的是将Java类的二进制代码合并到JVM的运行状态之中的过程.在链接之前,这个类必须被成功加载.类的链接包括验证.准备和解析等几个步骤. 验证:是否有正确的内部结构,并和其他类协调一致. 准备:负责为类的静态成员分配内存,并设置默认初始化值 解析:

Java反射学习(java reflect)(二)

ok之前说了Java的反射和反射分析类,那这些东西有神马作用呢,下面就来说应用: 三.运行时使用反射分析对象 简单写一个Employee类,然后利用JAVA反射去取name域,getDeclareField(String  name)可以取得全部,就算是private的上面说过了,所以到第9行还是没问题的. .. 但是在第11行的时候错了,因为get(Field f)没有访问权限所以IllegalAccessException,在这里有个方法setAccessible(Boolean b),这货