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;
}
}

转载请注明出处,谢谢!

 

反射+javacsv+scv文件构建资源获取的更多相关文章

  1. 比反射更快!使用ASM获取class信息(ClassReader)

    比反射更快!使用ASM获取class信息(ClassReader) 通常我们想要在java运行时获取class的信息时,通常使用反射的方式来获取其中的属性,方法,注解等信息.通常是这样的: Class ...

  2. PE文件之资源讲解

    资源是PE文件中非常重要的部分,几乎所有的PE文件中都包含资源,与导入表与导出表相比,资源的组织方式要复杂得多,要了解资源的话,重点在于了解资源整体上的组织结构. 我们知道,PE文件资源中的内容包括: ...

  3. Android(java)学习笔记135:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  4. 如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片

    在我们迭代项目的过程中,经常会启用某些功能,或者修改某些界面的问题,那么问题来了,这样很容易出现大量的冗余.java文件,冗余资源文件,一些冗余的界面文件等.那么问题既然出现了,那么如何去解决呢,这就 ...

  5. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ...

  6. Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组

    一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, ...

  7. Android(java)学习笔记77:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  8. MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

    MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...

  9. asp.net 5 中应用程序根目录及物理文件根目录的获取方式 此文已过期,不再适应rc1以后的版本

    之前看了asp.net5,小弟就试着用了用,做了个小网站练习一下,有一个小模块需要上传图片到wwwroot下的images文件夹,但是aspnet5 发生了翻天复地变化,之前获取网站根目录的的方法不再 ...

随机推荐

  1. STL set multiset map multimap unordered_set unordered_map example

    I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chines ...

  2. 【CF】323 Div2. D. Once Again...

    挺有意思的一道题目.考虑长度为n的数组,重复n次,可以得到n*n的最长上升子序列.同理,也可以得到n*n的最长下降子序列.因此,把t分成prefix(上升子序列) + cycle(one intege ...

  3. 清理ms sql server 大日志文件数据

    1.手动分离数据库: 2.手动删除日志文件: 3.重新生成日志文件: CREATE DATABASE FMIS0 ON (FILENAME = 'E:\FMIS0_DATA\FMIS0-Date') ...

  4. CentOS升级Python的方法

    centOS内核版本为:3.10.101-1.el6.elrepo.x86_64 1,下载Python安装包 wget http://www.python.org/ftp/python/2.7.6/P ...

  5. CodeViz产生函数调用图

    一.安装过程   1.CodeViz的安装 0).确认你已经安装Graphviz[ http://www.graphviz.org/] 1).下载CodeViz.[ http://www.csn.ul ...

  6. php 修改上传文件大小

    有些朋友要通过自己的网站后台,包括论坛,来上传一些文件,php一般为2m,或8m(以下我们按默认为2m),接下来就是来讲怎么修改上传文件大小的. 1.首先修改执行上传文件限制 一般的文件上传,除非文件 ...

  7. fopen/fclose

    在操作文件之前要用fopen打开文件,操作完毕要用fclose关闭文件; 打开文件就是在操作系统中分配一些资源用于保存该文件的状态信息,并得到该文件的标示,以后用户程序就可以这个标志对文件做各种操作了 ...

  8. 如何使用chown?

    以test为例,目前test归root用户拥有,也归root组拥有 [root@localhost home]# ls -al total 36 drwxr-xr-x    6 root     ro ...

  9. Linux系统IP地址

    1.IP地址概述 2.配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述,参考<计算机网络>课 ...

  10. [struts2]Struts遍历标签<s:iterator>总结 [转]

    转至:http://blog.csdn.net/lufeng66/article/details/7338098 struts2的s:iterator 可以遍历 数据栈里面的任何数组,集合等等 以下几 ...