java反射机制入门04

需要jxl.jar

package com.rainmer.main;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

import com.rainmer.bean.Book;

public class ExcleBook {
    public void excleOut(ArrayList<Book> ar){
        WritableWorkbook book = null;//excle对象
        try{
            //创建excle对象
            book = Workbook.createWorkbook(new File("G:/book.xls"));
            //通过excle对象创建一个选项卡对象
            WritableSheet sheet = book.createSheet("sheet", 0);
            for (int i = 0; i < ar.size(); i++) {
                //创建一个单元格对象
                Label la0 = new Label(0,i,String.valueOf(ar.get(i).getId()));
                Label la1 = new Label(1,i,ar.get(i).getName());//创建单元格。参数说明:列,行,值
                Label la2 = new Label(2,i,ar.get(i).getType());
                //将创建好的单元格对象放入选项卡中
                sheet.addCell(la0);
                sheet.addCell(la1);
                sheet.addCell(la2);
            }
            //写入目标路径
            book.write();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                book.close();
            } catch (WriteException | IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    public ArrayList<Book> excleIn(){
        ArrayList<Book> ar = new ArrayList<Book>();
        Workbook book = null;
        try{
            book = Workbook.getWorkbook(new File("G:/book.xls"));
            Sheet sheet = book.getSheet(0);
            for (int i = 0; i < sheet.getRows(); i++) {
                Book bo = new Book();
                Cell cell = sheet.getCell(0,i);//Cell读取的时候的单元格,列,行
                bo.setId(Integer.valueOf(cell.getContents()));
                bo.setName(sheet.getCell(1, i).getContents());
                bo.setType(sheet.getCell(2, i).getContents());
                ar.add(bo);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            book.close();
        }
        return ar;
    }

    public static void main(String[] args) {
        ExcleBook book = new ExcleBook();

        ArrayList<Book> ar = new ArrayList<Book>();
        Book bo1 = new Book();
        bo1.setId(1);
        bo1.setName("火影之鸣人重生");
        bo1.setType("同人");
        Book bo2 = new Book();
        bo2.setId(2);
        bo2.setName("我和我的老婆大人");
        bo2.setType("都市");
        ar.add(bo1);
        ar.add(bo2);

        book.excleOut(ar);

        ArrayList<Book> result = book.excleIn();
        for (int i = 0; i < result.size(); i++) {
            System.out.println(result.get(i).getName());
        }
    }
}

运行结果:

调用了setName方法
调用了setName方法
调用了getName方法
调用了getName方法
调用了setName方法
调用了setName方法
调用了getName方法
火影之鸣人重生
调用了getName方法
我和我的老婆大人

——————————————————————————————————————————————————————————————————————————

  如果有一个项目,要求你实现图书信息导入导出,用户信息导入导出,借阅信息导入导出,维护信息导入导出,管理信息导入导出......。利用反射可以很好地实现代码重用。

package com.rainmer.util;

import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;

import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import com.rainmer.bean.Book;

public class ExcleUtil {

    //如果有一个项目,
    //要求你实现图书信息导入导出,用户信息导入导出,借阅信息导入导出,维护信息导入导出,管理信息导入导出。。。。。
    public void excleOut(ArrayList ar, String str){
        WritableWorkbook book = null;
        try {
            book = Workbook.createWorkbook(new File(str));
            WritableSheet sheet = book.createSheet("sheet", 0);
            for(int i = 0;i<ar.size();i++){
                Object ob = ar.get(i);
                Class cl = ob.getClass();
                Field[] fi = cl.getDeclaredFields();
                for(int j = 0;j<fi.length;j++){
                    fi[j].setAccessible(true);
                    Label la = new Label(j, i, String.valueOf(fi[j].get(ob)));
                    sheet.addCell(la);
                }
            }
            book.write();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                book.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public ArrayList excleIn(Class cl, String str){
        ArrayList ar = new ArrayList();
        Workbook book = null;
        try{
            book = Workbook.getWorkbook(new File(str));
            Sheet sheet = book.getSheet(0);
            Field[] fi = cl.getDeclaredFields();
            for (int i = 0; i < sheet.getRows(); i++) {
                Object ob = cl.newInstance();
                for (int j = 0; j < fi.length; j++) {
                    fi[j].setAccessible(true);
                    String con = sheet.getCell(j, i).getContents();
                    if(fi[j].getType().toString().equals("class java.lang.String")){
                        fi[j].set(ob, con);
                    }else if(fi[j].getType().toString().equals("int")){
                        fi[j].setInt(ob, Integer.valueOf(con));
                    }
                }
                ar.add(ob);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return ar;
    }

    public static void main(String[] args) {
        ExcleUtil util = new ExcleUtil();
        ArrayList<Book> ar = new ArrayList<Book>();
        Book bo1 = new Book();
        bo1.setId(1);
        bo1.setName("火影之鸣人重生");
        bo1.setType("同人");
        Book bo2 = new Book();
        bo2.setId(2);
        bo2.setName("我和我的老婆大人");
        bo2.setType("都市");
        ar.add(bo1);
        ar.add(bo2);
        util.excleOut(ar, "G:/bookA.xls");

      ArrayList<Book> result = util.excleIn(Book.class, "G:/book.xls");
      for (Book book : result) {
        System.out.println("id="+book.getId()+";name="+book.getName()+";type="+book.getType());
      }

    }
}

运行结果:

调用了setName方法
调用了setName方法
调用了getName方法
id=1;name=火影之鸣人重生;type=同人
调用了getName方法
id=2;name=我和我的老婆大人;type=都市

时间: 2025-01-04 09:22:06

java反射机制入门04的相关文章

java反射机制入门3

Method对象的机制与实现 1.Method对象概述 1)java.lang.reflect.Method类是用于表示类中.接口中方法对象的类. 2)可以操作类中私有,以及公有等全部方法. 2.Method对象的常用方法介绍 方法名 释义 getName() 获得方法名称 getReturnType() 获得方法返回值类型 invoke(Object obj, Object ...args) 利用obj对象调用该方法 getParameterTypes() 获取方法所有参数类型,按照顺序返回c

java反射机制入门02

Field对象的机制与实现 1.Field对象概述 1)Java.lang.reflect.Field类,是用于表示类中.接口中属性对象的类. 2)可以操作类中私有,以及公有等全部属性和属性的信息. 2.Field对象的常用方法介绍 方法名 释义 getName() 获取属性名称 getType() 获取属性类型 get(Object obj) 取得obj对象中这个属性的值 set(Object obj,Object value) 向boj这个属性赋值value setAccessible(bo

java的反射机制入门

理解Java的反射机制对学习Java框架有很大帮助,比如Spring框架的核心就是使用Java反射实现的,同时对做一些Java底层操作也会有帮助,比如字节码操作.自定义注解等. 什么是反射 Java反射说的是在运行状态中,对于任何一个类,我们都能够直到这个类有哪些方法和属性.对于任何一个对象,我们都能够对它的方法和属性进行调用.这种动态获取对象信息和调用对象方法的功能就是Java的反射机制. 反射的三种方式 反射其实就是获取类的字节码文件,也就是.class文件,那么我们就可以通过Class这个

Java反射机制大神必学系列之 ,高级与低级的差别在哪里?

Java反射机制大神必学系列之 ,高级与低级的差别在哪里?java学习爱好者 2019-05-20 19:08前言今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文Java反射机制定义 Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.

Java 反射机制(包括组成、结构、示例说明等内容)

http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation

Java反射机制的原理及在Android下的简单应用

花了几天时间,研究了一下Java的反射机制.在这里总结一下这几天学习的成果,一来分享自己的学习过程和在学习中遇到的问题,二来是给像我一样不太了解Java反射机制的同学做一个简单的介绍.在文章后面会链接一个Android反射机制的应用程序. 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述

利用Java反射机制完成XML到对象的解析

对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hashtable,那就能大大加快访问的速度. 由于工作的需要,写了一个解析工具,将XML解析成相应的对象列表.以下是源代码,希望对大家有所帮助,更希望大家帮我来改进这个工具. package com.sp.util; /* * author:hingwu * email:[email protected]

Java反射-初步入门

Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 上面提到了类和对象,先了解什么是类和对象. java中类: 1.抽象描述 类:类是客观存在的.抽象的.概念东西. 对象:对象是具体的,指一个具体的东西. 打比方:饮料是一个类,可乐.雪碧就是对象. 总结一句话:类是对象的模版,对象

Java 反射机制介绍

参考文章:http://www.cnblogs.com/skywang12345/p/3345205.html Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation注解"等内容.