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

摘要:
javacsv。Jar:Jar包用于处理javacsv文件中的csv文件:逗号分隔的值,其文件以纯文本形式存储表数据。CSV文件由由换行符分隔的任意数量的记录组成;每条记录由字段组成。字段之间的分隔符是其他字符或字符串。最常见的是逗号或制表符。CSV文件格式的通用标准不存在,但它在RFC4180中有一个基本描述。所使用的字符编码也未指定,但7位ASCII是最基本的通用编码注意:CSV文件的编码格式!代码如下:importjava.io。缓冲读取器;importjava.io。文件读取器;导入java.lang.reflect。领域importjava.nio.charset。字符集;导入java.util。阵列列表;导入java.util。列表importcom.csvreader。CsvReader;/***2016.3.22*@authorsgl*用于处理csv文件的CsvReaderUtil工具类*/publicclassCsvReader.Util{/***读取csv文件头信息*@paramfileName*@return*/privatestaticList<String˃readHeader{try{@SuppressWarningsBufferedReaderreader=newBufferedReader;Stringheader=reader.readLine();System.out.println;String[]templates=header.split(“,”); ListheaderList=newArrayList();对于{if(!

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文件构建资源获取》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UVa 674 Coin Change【记忆化搜索】SQL Server日期时间函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java各种反射性能对比

对各种方法实现get方法的性能进行了一个测试。 总共有5个测试,,每个测试都是执行1亿次 1. 直接通过Java的get方法 2.通过高性能的ReflectAsm库进行测试 3.通过Java Class类自带的反射获得Method测试 4.使用Java自带的Property类获取Method测试 5.BeanUtils的getProperty测试 1 测试...

springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截

1.目的:实现全局异常拦截,不用在controller在写try catch,使用代码看起来更加整洁 2.不啰嗦直接上代码 2.1首先我们创建一个异常捕获处理类(@RestControllerAdvice = @ControllerAdvice + @ResponseBody) @RestControllerAdvice@Slf4jpublic cla...

JDBC实现从数据库中读取信息以表格的形式展示

方法都是通用的,要看你如何去灵活的运用!!! 本文以“新闻发布系统”为例 第一步:建立数据库(使用的是mysql数据库) 其中数据库信息为: 数据库名:news 表名:title,字段名分别为(序号、标题名称、创建者、创建时间) create table title( id int(2) primary key, name varchar(20), cre...

Java Http接口加签、验签操作方法

1、业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝、支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确保两个签名是一样的,验签通过之后再进行业务逻辑处理。我们这里主要介绍一下处理思路,至于签名算法我不做过多介绍,网上一大堆。 2、处理思路 双方约定好,参数按特...

thinkphp 常见问题

0.写在最前面的不断更新 (1)trace不起作用 A:必须要输出到模板,才会有trace信息 (2)提示“您浏览的页面暂时发生了错误!请稍后再试~” A:检查控制器(看看能进到控制器没有,设断点输出一下。如果没有。检查控制器名字,路径对了没有?) (3)Model:relation您所请求的方法不存在! A:这没什么好说的了,检查方法。 (4)神马都检查...

ActiveMQ入门介绍

 1.JMS简介     JMS的全称是Java Message Service,即Java消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需求中可以在特定的时候利用生产者生成消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种类型,一种是点对点的,...