前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java反射机制入门04

java反射机制入门04

作者头像
用户1737026
发布2018-05-17 17:35:51
6080
发布2018-05-17 17:35:51
举报
文章被收录于专栏:五毛程序员五毛程序员

需要jxl.jar

代码语言:javascript
复制
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方法 我和我的老婆大人

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

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

代码语言:javascript
复制
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");

运行结果:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档