我也來玩玩反射(reflect of java)

來源:互聯網
上載者:User

不說P話,直接上碼:

 

  package com.hzmagix.utils;<br />import java.io.File;<br />import java.io.FileInputStream;<br />import java.io.FileNotFoundException;<br />import java.io.IOException;<br />import java.lang.reflect.Constructor;<br />import java.lang.reflect.InvocationTargetException;<br />import java.text.DateFormat;<br />import java.text.DecimalFormat;<br />import java.text.SimpleDateFormat;<br />import java.util.Date;<br />import org.apache.poi.hssf.usermodel.HSSFCell;<br />import org.apache.poi.hssf.usermodel.HSSFDateUtil;<br />import org.apache.poi.hssf.usermodel.HSSFRow;<br />import org.apache.poi.hssf.usermodel.HSSFSheet;<br />import org.apache.poi.hssf.usermodel.HSSFWorkbook;<br />import com.hzmagix.model.Flight;<br />public class ExcelParsetUtils {<br />public static SimpleDateFormat format = new SimpleDateFormat(<br />"yyyy-MM-dd HH:mm:ss");<br />// TODO<br />private static File exlfile = new File("F://flight_example.xls");<br />private static int celllenth = 11;<br />private static Object parset(Object clazz, String vars) {<br />System.out.println(vars);<br />Class clz = clazz.getClass();<br />String strs[] = vars.split(",");<br />Constructor ctor[] = clz.getDeclaredConstructors();<br />try {<br />for (Constructor c : ctor) {<br />Class cx[] = c.getParameterTypes();<br />if (cx.length == 0) {<br />System.out.println(format.format(new Date())<br />+ " DEBUG:無法解析無參建構函式!!!");<br />continue;<br />}<br />if (cx.length != strs.length + 1) { // 不構造ID<br />System.out.println(format.format(new Date())<br />+ " ERROR:參數傳入錯誤!!!");<br />continue;<br />}<br />Object args[] = new Object[cx.length];<br />for (int i = 1; i < cx.length; i++) {// 忽略ID<br />if (cx[i].isInstance(new Long(321))) {<br />args[i] = new Long(strs[i]);<br />} else if (cx[i].isInstance(new String("STRING TEST"))) {<br />args[i] = new String(strs[i]);<br />} else if (cx[i].isInstance(new Date())) {<br />args[i] = new Date();// 暫不維護<br />}<br />}<br />Object obj = Class.forName(clazz.getClass().getName())<br />.getConstructor(cx).newInstance(args);<br />System.out.println(obj);<br />return obj;<br />}<br />} catch (ClassNotFoundException e) {<br />e.printStackTrace();<br />} catch (IllegalArgumentException e) {<br />e.printStackTrace();<br />} catch (SecurityException e) {<br />e.printStackTrace();<br />} catch (InstantiationException e) {<br />e.printStackTrace();<br />} catch (IllegalAccessException e) {<br />e.printStackTrace();<br />} catch (InvocationTargetException e) {<br />e.printStackTrace();<br />} catch (NoSuchMethodException e) {<br />e.printStackTrace();<br />}<br />return null;<br />}<br />public static void parset(File exlfile, Object clazz, int cellength) {<br />try {<br />FileInputStream in = new FileInputStream(exlfile.getPath());<br />HSSFWorkbook workbook = new HSSFWorkbook(in);<br />HSSFSheet sheet = workbook.getSheetAt(0);<br />int rows = sheet.getPhysicalNumberOfRows();<br />DecimalFormat df = new DecimalFormat("#");<br />DateFormat format = new SimpleDateFormat("yyyy-MM-dd");<br />for (int i = 1; i < rows; i++) {// 第一行為標題<br />// Traffic wt = new Traffic();<br />HSSFRow row = sheet.getRow(i);<br />if (row != null) {<br />// 開始取行下的列<br />StringBuffer sb = new StringBuffer();<br />for (short j = 0; j < cellength; j++) {<br />HSSFCell cell = row.getCell(j);<br />Date date = new Date();<br />String stringValue = new String();<br />if (cell != null) {<br />// 判斷是什麼類型的資料<br />switch (cell.getCellType()) {<br />case HSSFCell.CELL_TYPE_NUMERIC:<br />stringValue = df.format(cell<br />.getNumericCellValue());<br />if (HSSFDateUtil.isCellDateFormatted(cell)) {<br />double d = cell.getNumericCellValue();<br />date = HSSFDateUtil.getJavaDate(d);<br />}<br />break;<br />case HSSFCell.CELL_TYPE_STRING:<br />stringValue = cell.getStringCellValue();<br />break;<br />}<br />}<br />sb.append(stringValue);<br />sb.append(",");<br />}<br />String s = sb.substring(0, sb.toString().length() - 1);<br />// TODO FFF<br />parset(clazz, s);<br />}<br />}<br />// for (Traffic wt : trafficList) {<br />// trafficManager.save(wt);// 儲存<br />// }<br />} catch (FileNotFoundException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />} catch (IOException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br />// toexl();<br />System.out.println("end!!!");<br />}<br />public static void main(String[] args) {<br />Flight tr = new Flight();<br />parset(exlfile, tr, celllenth);<br />}<br />} 

 

 

  其實要實現的功能很簡單,把excel表單以批量形式寫入到資料庫,可是每次根據不同的BEAN寫一樣的代碼,真是件效率低下而且很讓電腦浪費資源,最後令程式員後期非常難以維護的一件事($_$廢話!),以前就有用過反射,可以根據給定的類然後產生一個執行個體,拿到執行個體後,調用Hibernate saveOrupdate來維護到持久層.(具體儲存方法因人因時而宜.)所以我花了一下午的時間把這個寫好了.不知道有沒有用,反正好用!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.