• 反射+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; } }


    转载请注明出处,谢谢!

     
  • 相关阅读:
    使用 ReplicationHandler 设置一个中继器(Repeater)
    SpringSource通过Spring for Android 1.0将Spring Framework引入到Android上
    Lotus Quickr 8.5.1 for Domino 中目录服务的配置详解
    Pdf文件编辑攻略
    Android 4.1最终版SDK和ADT Plugin全线发布
    JXL copySheet 的一个BUG
    Spring Mobile 1.0发布
    jQuery 1.8、1.9与2.0特性概览,2.0将移除对IE6/7/8的支持
    Regsvr32命令修复IE 重装IE
    系统性分析性能问题与调优方法
  • 原文地址:https://www.cnblogs.com/myadmin/p/5309930.html
Copyright © 2020-2023  润新知