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=都市

 

你可能感兴趣的:(java反射机制)