java的简单反射运用实例(读取csv文件映射为对象)

<span style="font-family: Arial, Helvetica, sans-serif;">private Map<String, ArrayList<? extends Object>> loadCSVObject(</span>
            String objectName, String csvFileNodeName) throws Exception {
            String fieldArray[] = null;
            Map<String, ArrayList<? extends Object>> map = new HashMap<String, ArrayList<? extends Object>>();

            InputStream inputStream = new FileInputStream(new File(DATA_FILE_PREFIX
                + File.separator + csvFileNodeName));
            BufferedReader br = new BufferedReader(new InputStreamReader(
                inputStream));

            if (br.ready()) {

                String line = null;
                for (int i = 0; i < 3; i++) {
                    if (i == 2) {
                        line = br.readLine().substring(1);

                        fieldArray = line.split(",");
                    } else if (i < 2 || i < 3) {
                        br.readLine();
                    }
                }
            }

            while (br.ready()) {

                String line = br.readLine();

                String valueArray[] = line.split(",");

                Object o = Class.forName(objectName).newInstance();
                for (int i = 1; i < valueArray.length; i++) {
                    String value = valueArray[i].replace("&cm;", ",");
                    this.setFieldValue(o, StringUtils.trim(fieldArray[i - 1]), value);
                }
                ArrayList<Object> list = (ArrayList<Object>)map.get(valueArray[0]);
                if (list == null) {
                    list = new ArrayList<Object>();
                    map.put(valueArray[0], list);
                }
                list.add(o);
            }
            br.close();
            return map;
        }
<span style="white-space:pre">	</span>// 对象映射
        private void setFieldValue(Object obj, String fname, String value) {
            if (value == null || value.equals("") ) {
                return;
            }
            Class<?> clazz = obj.getClass();
            try {
                String methodname = "set" + Character.toUpperCase(fname.charAt(0))
                    + fname.substring(1);
                Method[] methods = clazz.getMethods();
                Method method = null;
                for (Method m : methods) {
                    if (m.getName().equals(methodname)) {
                        method = m;
                        break;
                    }
                }
                if (method == null) {
                    method = clazz.getDeclaredMethod(methodname);

                    if (!Modifier.isPublic(method.getModifiers())) {
                        method.setAccessible(true);
                    }
                    method.invoke(obj);
                } else {
                    Class<?>[] types = method.getParameterTypes();
                    if (types[0].equals(BigDecimal.class)) {

                        method.invoke(obj, new BigDecimal(value));
                    } else {
                        method.invoke(obj, value);
                    }
                }

            } catch (Exception e) {
                try {
                    Field field = clazz.getDeclaredField(fname);
                    if (!Modifier.isPublic(field.getModifiers())) {
                        field.setAccessible(true);
                    }
                    if (field.getType().equals(BigDecimal.class)) {
                        field.set(obj, new BigDecimal(value));
                    } else {
                        field.set(obj, value);
                    }
                } catch (Exception fe) {
                    return;
                }
            }
        }

题外话:以前用Hibernate做项目是出现过,根据xml文件映射不到对象,是因为对象没有空的构造函数,所以在运用框架的时候,很多框架都是利用反射原理来实现的,所以在写类的时候一定要注意留下一个空构造函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用CSV文件读取库来读取CSV文件,其中常用的库包括OpenCSV和Apache Commons CSV。 1. 使用OpenCSV OpenCSV是一个流行的CSV文件读取库,它可以从文件读取CSV数据并将其转换为Java对象。以下是使用OpenCSV读取CSV文件的示例代码: ```java import com.opencsv.CSVReader; import java.io.FileReader; import java.io.IOException; public class CSVReaderExample { public static void main(String[] args) throws IOException { CSVReader reader = new CSVReader(new FileReader("data.csv")); String[] line; while ((line = reader.readNext()) != null) { for (String value : line) { System.out.print(value + " "); } System.out.println(); } reader.close(); } } ``` 在上面的代码中,我们创建了一个CSVReader实例并将其与CSV文件连接。然后,我们使用readNext()方法逐行读取CSV文件,并将每行的值存储在一个String数组中。最后,我们遍历String数组并输出每个值。 2. 使用Apache Commons CSV Apache Commons CSV是另一个流行的CSV文件读取库。以下是使用Apache Commons CSV读取CSV文件的示例代码: ```java import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; public class CSVReaderExample { public static void main(String[] args) throws IOException { CSVFormat format = CSVFormat.DEFAULT.withHeader().withDelimiter(','); CSVParser parser = new CSVParser(new FileReader("data.csv"), format); for (CSVRecord record : parser) { String name = record.get("Name"); int age = Integer.parseInt(record.get("Age")); String email = record.get("Email"); System.out.println(name + ", " + age + ", " + email); } parser.close(); } } ``` 在上面的代码中,我们使用CSVFormat类定义CSV文件的格式。然后,我们创建了一个CSVParser实例并将其与CSV文件连接。使用CSVRecord类,我们可以逐行读取CSV文件并将其转换为Java对象。在本例中,我们使用get()方法访问每个字段的值,并将其转换为相应的Java数据类型。最后,我们输出每个记录的值。 这些是使用Java读取CSV文件的两种常见方法。你可以选择你喜欢的方法,根据需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值