反射+javacsv+scv文件构建资源获取

1.反射之前已经写过,大家可以在http://www.cnblogs.com/myadmin/p/5282628.html中大概了解下。同时请大家指正。

javacsv.jar:java中用来处理csv文件的jar包

csv文件:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码(来自百度)
注意点:csv文件的编码格式!
代码如下:
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;import com.csvreader.CsvReader;
/*** 2016.3.22* @author sgl* CsvReaderUtil 用于处理csv文件的工具类*/
public class CsvReaderUtil {/*** 读取csv文件表头信息* @param fileName* @return*/private static List<String> readHeader(String fileName) {try {@SuppressWarnings("resource")BufferedReader reader = new BufferedReader(new FileReader(fileName));String header = reader.readLine();System.out.println(header);String[] temps = header.split(",");List<String> headerList = new ArrayList<String>();for (String string : temps) {if (!string.equals("$end")) {headerList.add(string);}}return headerList;} catch (Exception e) {e.printStackTrace();}return null;}/*** 读取csv内容* @param fileName* @return* @throws Exception*/private static ArrayList<String[]> readeCsv(String fileName) throws Exception {ArrayList<String[]> csvList = new ArrayList<String[]>(); String csvFilePath = fileName;CsvReader reader = new CsvReader(csvFilePath, ',', Charset.forName("UTF-8")); reader.readHeaders(); while (reader.readRecord()) { String[] Lines = reader.getValues();boolean isStop = false;for (int i = 0; i < Lines.length; i++) {if (Lines[0].equals("$end")) {isStop = true;break;}}if (isStop) {break;}csvList.add(Lines);}reader.close();return csvList;}/*** 通过反射获取对象列表* @param headerList csv表头信息(表头字段需和类属性对应)
*
@param cntList csv表数据列表
*
@param classNmae 类名
     * @param path csv文件路径   
*
@return* @throws Exception*/public static List<Object> getConfigList(String path, String classNmae)throws Exception {List<Object> list = new ArrayList<Object>();List<String> headerList=readHeader(path);List<String[]> cntList=readeCsv(path);Class<?> clazz = Class.forName(classNmae);for (String[] tempArrs : cntList) {Object obj = clazz.newInstance();for (int i = 0; i < headerList.size(); i++) {Field f = clazz.getDeclaredField(headerList.get(i));System.out.println(headerList.get(i)+"------"+tempArrs[i]);f.setAccessible(true);setParamter(obj, f, tempArrs[i]);}list.add(obj);}return list;}/*** 设置参数* @param obj* @param f* @param val* @throws Exception*/private static void setParamter(Object obj, Field f, String val) throws Exception {System.out.println(f.getType().getCanonicalName());if (("int").equals(f.getType().getCanonicalName())||("java.lang.Integer").equals(f.getType().getCanonicalName())) {f.set(obj, Integer.parseInt(val)); } else if (("long").equals(f.getType().getCanonicalName())|| ("java.lang.Long").equals(f.getType().getCanonicalName())) {f.set(obj, Long.parseLong(val));} else if (("float").equals(f.getType().getCanonicalName())) {f.set(obj, Float.parseFloat(val));} else if (("float[]").equals(f.getType().getCanonicalName())) {f.set(obj, getFloatArrayByString(val));} else if (("java.lang.String").equals(f.getType().getCanonicalName())) {f.set(obj, val);} else if (("java.lang.Long[]").equals(f.getType().getCanonicalName())) {f.set(obj, getLongArrayByString(val));} else if (("int[]").equals(f.getType().getCanonicalName())) {f.set(obj, getIntArrayByString(val));} else if (("java.util.Date").equals(f.getType().getCanonicalName())) {f.set(obj, getDateByString(val));}}private static Object getDateByString(String val) {return DateFormatUtils.getDates(val);}private static Long[] getLongArrayByString(String temp) {temp = temp.substring(1, temp.length() - 1);String[] arrays = temp.split(",");Long[] newArr = new Long[arrays.length];for (int i = 0; i < newArr.length; i++) {newArr[i] = Long.parseLong(arrays[i]);}return newArr;}private static float[] getFloatArrayByString(String temp) {temp = temp.substring(1, temp.length() - 1);String[] arrays = temp.split(",");float[] newArr = new float[arrays.length];for (int i = 0; i < newArr.length; i++) {newArr[i] = Float.parseFloat(arrays[i]);}return newArr;}private static int[] getIntArrayByString(String temp) {temp = temp.substring(1, temp.length() - 1);String[] arrays = temp.split(",");int[] newArr = new int[arrays.length];for (int i = 0; i < newArr.length; i++) {newArr[i] = Integer.parseInt(arrays[i]);}return newArr;} }


转载请注明出处,谢谢!

转载于:https://www.cnblogs.com/myadmin/p/5309930.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu网络连接未托管的解决办法

参考&#xff1a;http://blog.csdn.net/jiusifeng/article/details/7550277 我的系统是: [zcm~ #1]$uname -a Linux TIANKU 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:15:33 UTC 2013 i686 i686 i386 GNU/Linux [zcm~ #2]$解决办法&#xff1a;vi /etc/Network…

解决EditText不能撑满全屏的问题及EditText你应该知道的属性

一般我们要实现去下图一的效果很简单&#xff1a;两个EditText就搞定效果图一&#xff1a;但是我们想让第二个EditText撑满剩余空间怎么做&#xff1f;如效果图二效果图二&#xff1a;解决&#xff1a;使用了ScrollView嵌套LinearLayout&#xff0c;将ScrollView中android:fill…

Active Directory授权还原

Technorati 标签: Active Directory,授权还原额外域控制器有很多好处&#xff0c;例如可以平衡用户对AD的访问压力&#xff0c;有利于避免唯一的域控制器损坏所导致域的崩溃。域内所有的域控制器都有一个内容相同的Active Directory&#xff0c;而且Active Directory的内容是动…

React开发(283):控制文件不会被git追踪

之后 在本地执行 git update-index --assume-unchanged src/models/menu.js 然后再修改 就不会被 git 追踪到 就可以随便修改了

VLC简介及使用说明

From: http://blog.csdn.net/jianxi258/article/details/6006307 一、简介 VLC的全名是Video Lan Client&#xff0c;是一个开源的、跨平台的视频播放器。VLC支持大量的音视频传输、封装和编码格式&#xff0c;完整的功能特性列表可以在这里获得http://www.videolan.org/vl…

Spring DI模式 小样例

今儿跟同事讨论起来spring早期的&#xff0c;通过大篇幅xml的配置演变到今天annotation的过程&#xff0c;然后随手写了个小样例&#xff0c;感觉还不错&#xff0c;贴到这里留个纪念。样例就是用JAVA API的方式&#xff0c;演示了一下DI的注入模式&#xff0c;但因我对设计模式…

PHP的SESSION使用,文件上传下载等

2019独角兽企业重金招聘Python工程师标准>>> PHP中Session的使用&#xff1a; 1. session_start(): 初始化session,如果页面要使用session&#xff0c;必须先使用这句话&#xff0c;否则会报错。 告诉服务器使用session。一般来说&#xff0c;php是不会主动使用sess…

Linux-Ubuntu 启用root账户

From&#xff1a; http://www.cnblogs.com/ziwuge/archive/2011/11/13/2247105.html Ubuntu Linux有一个与众不同的特点&#xff0c;那就是初次使用时&#xff0c;你无法作为root来登录系统&#xff0c;为什么会这样&#xff1f;这就要从系统的安装说起。对于其他Linux系统来 说…

[ECMAScript] 举例说明你对es6的class的理解

[ECMAScript] 举例说明你对es6的class的理解 class实际上就是封装了构造函数&#xff0c;本质上class类就是一个函数 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

二分查找离左边元素最近的(可以等于)

int compare(const void *a,const void *b) {return *(int *)a-*(int *)b; } //二分查找离元素&#xff08;可以等于&#xff09; int bi_search(int num[10], int len, int target) { <span style"white-space:pre"> </span>int begin 0; <span sty…

[ECMAScript] 说说你对set数据结构的理解

[ECMAScript] 说说你对set数据结构的理解 似于数组&#xff0c;但它的一大特性就是所有元素都是唯一的&#xff0c;没有重复。 在向Set加入值时&#xff0c;Set不会转换数据类型&#xff0c;内部在判断元素是否存在时用的类似于精确等于()的方法&#xff0c;“2”和2是不同的&…

ecshop 标签使用 非常好的例子

ecshop 标签使用 非常好的例子 在ECSHOP代码的history.lbi 中有下面的用法。 {insert namehistory} &#xff0c;是用来显示浏览历史的。 跟踪代码后发现&#xff0c;控制语句是在 includes/lib_insert.php 文件。 这个文件是ECSHOP 动态内容函数库。 里面定义各个函数的格式都…

SecureCRT无法登录Ubuntu

一个Ubuntu系统刚安装好时&#xff0c;可能缺少必要的软件&#xff0c;导致出现各种奇怪的问题。比如&#xff1a;SecureCRT无法登录Ubuntu 最初以为是防火墙的原因&#xff0c;后来把防火墙关了后&#xff0c;发现还是一样&#xff0c;最终在网上找到了答案&#xff0c;就是因…

[数学最安逸][UVa1638改编][第一类斯特林数+组合数]杆子的排列

有高为1,2,3,...,n的杆子各一根排成一行。从左边能看到l根&#xff0c;从右边能看到r根&#xff0c;求有多少种可能。 (l,r < 200,n < 200000) 给出T 组数据 (T < 500000) 对于每一组数据输出可能的个数&#xff0c;为避免写高精&#xff0c;将答案模 1e9 7 (它为质…

[ECMAScript] 谈谈你对es6的module体系的理解

[ECMAScript] 谈谈你对es6的module体系的理解 es5的模块规范出来之前&#xff0c;前端也实现了比如AMD CMD模块规范&#xff0c;对前端模块进行管理。 es6的模块规范在语言层面实现了模块功能 为什么需要模块化&#xff0c;没有模块化之前&#xff0c;开发者如果想封装代码&a…

Servlet的生命周期 与CGI的区别

2019独角兽企业重金招聘Python工程师标准>>> 对于Servlet&#xff0c;服务器只创建每个servlet的单一实例&#xff0c;每个用户请求都会引发新的线程-----将用户请求将会给相应的doGet/doPost进行处理。那么&#xff0c;servlet是如何进行创建和销毁的&#xff1f; …

自动化打包资源混淆集成python实践----资源混淆

前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案&#xff0c;以及美团打包方案、apk注释添加渠道号方案的实现。这里讲集成资源混淆。 1、资源混淆带来的好处&#xff1a; 1&#xff09;对资源文件起一定的保护作用&#xff0c;使其不能知其名不知意&…