java反射机制入门04

时间:2023-03-09 02:32:03
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=都市