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

反射+javacsv+scv文件构建资源获取相关推荐

  1. 复制一个文件或者从一个资源获取一个文件并复制

    /*** 复制一个文件或者从一个资源获取一个文件并复制* @param unknown_type $source 一个文件名或者一个资源,如$source='http://dctest.jub.cn/ ...

  2. (36)Gulp 构建资源(图片)文件

    一.Gulp 构建资源(图片)文件概述 所谓Gulp 构建资源(图片)文件就是将图片占用大小压缩后变小.其实我们Gulp构建资源文件不只是单独只图片,还有其他的比如说字体文件,也是资源文件.这里我们拿 ...

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

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

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

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

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

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

  6. Winform中使用OpenFileDialog选择文件打开并获取文件路径

    场景 在Windform中进行Excel导入时往往需要先将Excel文件打开并获取文件的路径,这时需要使用OpenFileDialog. OpenFileDialog 显示一个标准对话框,提示用户打开 ...

  7. java获取文件列表_java获取指定目录中的文件列表

    最近项目中会动态生成文件html及相关资源文件(css,js,png,mp3),为了防止文件名重复,需要获取目录中相同类型文件的最大编号,下面我用代码来实现获得文件列表. public static ...

  8. 通过反射突破private访问修饰符获取私有和公共的属性,设置和获取值

    import operate425.demo.demo1.Student;import java.lang.reflect.Constructor; import java.lang.reflect. ...

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

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

最新文章

  1. CS131专题-8:图像纹理
  2. C++ map的使用
  3. oracle安装结束后怎么登录,浅谈Oracle 11g 发行版2 新安装后关于登录的一些基本操作...
  4. error C2065: “IDD_DIALOG1”: 未声明的标识符
  5. UVA1587-Box
  6. Angular7 ng-zorro-antd 制作右键菜单
  7. 1.3 torch_向量/矩阵操作
  8. 世界最小晶体管问世 栅极长度仅一纳米
  9. 一句命令行检查cpu个数
  10. 解决:pycharm运行程序时在Python console窗口中运行 һ����ң�������1�����
  11. mysql rpm包安装指定路径_安装rpm包时指定路径
  12. 什么是静态,静态有什么作用呢?
  13. 最棒的游戏制作软件VAM Virt A mate汉化 优秀豪华
  14. Windows10上安装EPLAN无法连接虚拟加密狗的解决方法
  15. imx6ull ccm时钟体系
  16. JFreeChart的简单使用
  17. Oracle中文乱码(中文变问号?)解决方法---简单粗暴高效
  18. python对图片进行裁剪_python利用四个坐标点对图片进行裁剪
  19. 龙芯3A3000笔记本玩机笔记
  20. Maven实战读书笔记1

热门文章

  1. ::selection
  2. eclipse常用的快捷键
  3. 创建一个简单的WCF程序
  4. Javascript取select的选中值和文本
  5. 对美的拥有-读阿兰德波顿《旅行的艺术》(zz)
  6. ElasticSearch客户端注解使用介绍
  7. 美国安全厂商在云安全上的最新进展
  8. linux gdb使用
  9. mysql日志(介绍 路径修改 备份)
  10. 研究者展示黑客通过GPU绕过防毒软件查杀的方法