首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java导出txt跟excel

2012-10-06 
java导出txt和excel1、java导出txt通用类package com.anxiesoft.reportimport java.io.BufferedOutputStre

java导出txt和excel

1、java导出txt通用类

package com.anxiesoft.report;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import com.anxiesoft.util.DateUtil;/** * 导出txt通用类 *  * @author Administrator *  */public class ExportTxtUtil {private static Map<String, String> attrMap;static {attrMap = new HashMap<String, String>();attrMap.put("betweenProperty", "\t\t");attrMap.put("betweenRecord", "\r\n");}private static List<String> properties;private static String[] title;public static List<String> getProperties() {if (properties == null)return new ArrayList<String>();return properties;}public static void setProperties(List<String> properties) {ExportTxtUtil.properties = properties;}public static String[] getTitle() {return title;}public static void setTitle(String[] title) {ExportTxtUtil.title = title;}public static void transferModelToTxt(File file, List<Object> list) {// 获取属性间的分隔符String betweenPropery = (String) attrMap.get("betweenProperty");// 获取记录间的分隔符String betweenRecord = attrMap.get("betweenRecord").toString();BufferedOutputStream buff = null;FileOutputStream outSTr = null;try {outSTr = new FileOutputStream(file);buff = new BufferedOutputStream(outSTr);StringBuffer sb = new StringBuffer();for (int i = 0; i < title.length; i++) {if (i == title.length - 1) {sb.append(title[i] + betweenRecord);} else {sb.append(title[i] + betweenPropery);}}for (Object obj : list) {Class<?> clz = obj.getClass();Field[] fields = clz.getDeclaredFields();if (properties != null && properties.size() > 0) {for (String property : properties) {for (int i = 0; i < fields.length; i++) {Field field = fields[i];String fieldName = field.getName();if (property.equals(fieldName)) {// 把属性名的第一个字母变成大写String firstLetter = fieldName.substring(0, 1).toUpperCase();String getMethodName = "get" + firstLetter+ fieldName.substring(1);// 获得和属性对应的getXXX()方法Method getMethod = clz.getMethod(getMethodName,new Class[] {});// 调用原对象的getXXX()方法Object value = getMethod.invoke(obj,new Object[] {});if (value instanceof Date) {String val = DateUtil.convertDate2String((Date) value,"yyyy-MM-dd HH:mm:ss");sb.append(val + betweenPropery);}// 把为null的用""代替if (value == null) {value = "";}if (properties.size() == i) {sb.append(value);} else {sb.append(value + betweenPropery);}break;}}}}sb.substring(0, sb.length() - 2);sb.append(betweenRecord);}buff.write(sb.toString().getBytes("UTF-8"));buff.flush();buff.close();} catch (Exception e) {e.printStackTrace();} finally {try {buff.close();outSTr.close();} catch (Exception e) {e.printStackTrace();}}}}

?2、java导出excel通用类

import java.io.File;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import jxl.Workbook;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.write.Label;import jxl.write.NumberFormat;import jxl.write.NumberFormats;import jxl.write.WritableCellFormat;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;/** * 导出Excel通用类 *  * 请先设置表头和属性列表,然后调用transferModelToExcel *  * @author Administrator *  */public class ExportExcelUtil {private static NumberFormat nf = null;private static WritableCellFormat wcfN = null;private static WritableCellFormat wcfNText = null;private static String[] title;private static List<String> properties;public static List<String> getProperties() {if (properties == null)return new ArrayList<String>();return properties;}public static void setProperties(List<String> properties) {ExportExcelUtil.properties = properties;}public static String[] getTitle() {return title;}public static void setTitle(String[] title) {ExportExcelUtil.title = title;}/** * 格式话数字 *  * @return */private static NumberFormat getNf() {if (nf == null) {return nf = new NumberFormat("#.##");} else {return nf;}}/** * 数字格式化样式 *  * @return * @throws WriteException */private static WritableCellFormat getWcfN() throws WriteException {if (wcfN == null) {wcfN = new WritableCellFormat(getNf());wcfN.setBorder(Border.ALL, BorderLineStyle.THIN);return wcfN;} else {return wcfN;}}/** * 文本格式化样式 *  * @return * @throws WriteException */private static WritableCellFormat getWcfNText() throws WriteException {if (wcfNText == null) {wcfNText = new WritableCellFormat(NumberFormats.TEXT);wcfNText.setBorder(Border.ALL, BorderLineStyle.THIN);return wcfNText;} else {return wcfNText;}}/** * 填充第i个Sheet *  * @param i * @param objects * @param ws * @throws WriteException * @throws RowsExceededException */private static void fillSheet(int i, Object[][] objects, WritableSheet ws)throws WriteException, RowsExceededException {for (int j = 0; j < objects.length; j++) {for (int j2 = 0; j2 < objects[j].length; j2++) {String temp = "";if (objects[j][j2] != null)temp = objects[j][j2].toString();if (objects[j][j2] instanceof Double) {jxl.write.Number labelNF = new jxl.write.Number(j2, j,Double.parseDouble(temp), getWcfN());ws.addCell(labelNF);} else {Label labelC2 = new Label(j2, j, temp, getWcfNText());ws.addCell(labelC2);}}}}/** * 计算有几个工作簿,加上表头是100000001行 *  * @param title *            该Excel的表头 * @param data *            需要保存的数据 * @return <Object[][]保存一个工作簿的数据 */private static List<Object[][]> countSheet(String[] heading, Object[][] data) {List<Object[][]> list = new ArrayList<Object[][]>();int SheetCount = data.length / 100000000 + 1;if (data.length == 0) {Object[][] newStr = new Object[1][heading.length];newStr[0] = heading;list.add(newStr);} else {int oi = 0;for (int j = 0; j < SheetCount; j++) {Object[][] newStr = null;if (j + 1 == SheetCount) {newStr = new Object[data.length % 100000000 + 1][heading.length];} else {newStr = new Object[100000001][heading.length];}newStr[0] = heading;for (int i = 1; i < 100000001; i++) {newStr[i] = data[oi];oi++;if (oi == data.length)break;}list.add(newStr);}}return list;}/** * 设置首行冻结 *  * @param ws */private static void setIndex(WritableSheet ws, int index) {ws.getSettings().setVerticalFreeze(index);}private static Object[][] list2ObjectArray(List list) {Object[][] result = new Object[list.size()][title.length];try {if (list != null && list.size() > 0) {for (int i = 0; i < list.size(); i++) {Object obj = list.get(i);Class<?> clz = obj.getClass();Field[] fields = clz.getDeclaredFields();if (properties != null && properties.size() > 0) {for (int j = 0; j < properties.size(); j++) {String property = (String) properties.get(j);for (int k = 0; k < fields.length; k++) {Field field = fields[k];String fieldName = field.getName();if (fieldName.equals(property)) {// 把属性名的第一个字母变成大写String firstLetter = fieldName.substring(0,1).toUpperCase();String getMethodName = "get" + firstLetter+ fieldName.substring(1);// 获得和属性对应的getXXX()方法Method getMethod = clz.getMethod(getMethodName, new Class[] {});// 调用原对象的getXXX()方法Object value = getMethod.invoke(obj,new Object[] {});result[i][j] = value;break;}}}}}}} catch (Exception e) {e.printStackTrace();}return result;}public static void transferModelToExcel(File file, List<Object> list)throws IOException, RowsExceededException, WriteException {List<Object[][]> dataList = countSheet(title, list2ObjectArray(list));WritableWorkbook wwb = Workbook.createWorkbook(file);for (int i = 0; i < dataList.size(); i++) {Object[][] objects = dataList.get(i);WritableSheet ws = wwb.createSheet("Sheet" + (i + 1), i);setIndex(ws, 1);fillSheet(i, objects, ws);}wwb.write();wwb.close();}}

?

?

热点排行