java 按顺序 列间用逗号隔开 逐行写入txt文件(使用反射、linkedHashMap实现有序输出)

来源:互联网 发布:淘宝商家服务社区 编辑:程序博客网 时间:2024/06/06 09:47

主题:java生成txt文件。

这里有个需求:按顺序导出多列 列之间用逗号隔开。

有序输出到txt ‘有序’的实现方式:1、使用java反射按属性定义顺序读取字符串 2、使用linkedHashMap有序map来遍历键值对。

支持导出流以及直接输出到指定文件夹下。

具体代码如下:

package javacommon.file;import java.io.ByteArrayInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.lang.reflect.Field;import java.util.LinkedHashMap;import java.util.List;import org.apache.commons.lang.StringUtils;public class TxtFileExceport {private static String fileName = null;private static final String defualtCharset = "GBK";private static final String newLine = "\r\n";/** * 传入类 、该类的结果集 、编码字符集 产生对应的流 * @param clazz * @param list * @param charset * @return */public static InputStream exportInputStreamFromClass(Class clazz, List<?> list,String charset) {String content = getExportStringFromClass(clazz, list);return getInputStream(content, charset);}/** * 传入类、类的集合、编码字符集、导出路径 自动生成文件到指定路径 * @param clazz * @param list * @param charset * @param exportUrl */public static void exportFileFromClass(Class clazz, List<?> list, String charset,String exportUrl) {String content = getExportStringFromClass(clazz, list);export(content, charset, exportUrl);}/** * 传入linkedhashmap,编码字符集 产生对应的流文件 * @param list * @param charset * @return */public static InputStream exportInputStreamFromMap(List<LinkedHashMap<Object, Object>> list,String charset) {String content = getExportStringFromMap(list);return getInputStream(content, charset);}/** * 传入linkedhashmap、编码字符集、导出路径 自动生成文件到指定路径 * @param list * @param charset * @param exportUrl */public static void exportFileFromMap(List<LinkedHashMap<Object, Object>> list, String charset,String exportUrl) {String content = getExportStringFromMap(list);export(content, charset, exportUrl);}public static void export(String content, String charset, String exportUrl) {FileOutputStream out = null;try {out = new FileOutputStream(exportUrl);InputStream io = getInputStream(content, charset);int length = 1024;byte[] buffer = new byte[1024];while ((length = io.read(buffer)) > -1) {out.write(buffer, 0, length);}out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {/*List<TxtDemo> txtDemos = TxtDemo.generator();//getExportString(TxtDemo.class,txtDemos);TxtFileExceport.fileName = "billDownload"+new Date().getTime();String urlString = "D:/tmp/billDownload/" + fileName + ".txt";exportFile(TxtDemo.class, txtDemos, null, urlString); List<LinkedHashMap<Object, Object>> lists=TxtDemo.generatorMap(); export(getExportStringFromMap(lists), null, urlString);*/}/** * 反射拼接类的属性值 * @param clazz * @param list * @return */public static String getExportStringFromClass(Class clazz, List<?> list) {StringBuffer sb = new StringBuffer();for (Object object : list) {Field[] fs = clazz.getDeclaredFields();for (int i = 0; i < fs.length; i++) {Field field = fs[i];field.setAccessible(true);String valString;try {valString = field.get(object).toString();if (i == (fs.length - 1)) {sb.append(valString + newLine);} else {sb.append(valString + ",");}} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return sb.toString();}/**遍历 拼接value值 * @param list * @return */public static String getExportStringFromMap(List<LinkedHashMap<Object,Object>> list) {StringBuffer sb = new StringBuffer();for(int i=0;i<list.size();i++){LinkedHashMap<Object,Object> linkMap=list.get(i);int index=0;for(Object obj:linkMap.values()){if(obj==null){if(index==linkMap.values().size()-1){sb.append(""+newLine);}else{sb.append(",");}}else{if(index==linkMap.values().size()-1){sb.append(obj.toString()+newLine);}else{sb.append(obj.toString()+",");}}index++;}}return sb.toString();}public static InputStream getInputStream(String string, String charset) {byte[] bytes = null;try {if (StringUtils.isEmpty(charset)) {bytes = string.getBytes(defualtCharset);} else {bytes = string.getBytes(charset);}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}return new ByteArrayInputStream(bytes);}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}}

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 南充师范学校 南充师范学院 南充邮编是多少 南充是哪个省的城市 四川省南充市 南充卫生人才网 南充招聘信息 南充找工作包吃包住 南充美食团购 南充幼师学校 南充装修公司 南充整形医院排名 南充装修公司哪家好 南充汽修学校 南充哪家美容院好 四川南充学校 南充到营山火车时刻表 南充第二绕城高速公路 南充五一医院 南充阆中古城 南充高坪机场 南充英语培训机构 南充顺庆区鲜花店 南充到乌鲁木齐 南充纹眉多少钱 南充到遂宁火车时刻表 南充哪个美容院好 南充贷款公司 四川南充营山 南充广播电视大学 南充到蓬安火车时刻表 南充活动板房 南充哪里好玩 南充装饰公司哪家好 南充哪里有花店 南充无痛人流哪家好 南充美容院有哪些 南充电脑学校 南充中央空调 南充整形美容医院 南充到张家界