zoukankan      html  css  js  c++  java
  • excel中的数据导出为properties和map的方法

    在做项目的过程中,经常需要处理excel数据,特别是和业务人员配合时,业务人员喜欢使用excel处理一些数据,然后交给我们技术人员进行程序处理。利用POI读取写入excel数据,是经常使用的一个情景。本文介绍的是另外一种情景,是把excel表中的数据作为配置文件,也就是数据是键值对的情景。这种数据可以在java程序中保存为properties文件或者保存到Map中,然后在程序中使用这些数据。

    1 数据在excel中的处理

    键值对类型的数据在excel中,键和值各占一列,比如键在A列,对应的值在B列。我们可以把C列第一行的数据设置为‘=CONCATENATE(B1,"=",C1)’,比如键为username,值为zhangsan,则C列第一行显示的数据就是username=zhangsanC列其他数据可以直接拷贝第一行数据得到。都是左边是键,右边是值,中间是等号的数据。C列的数据就是我们得到键值对数据。

    2 properties文件的读取

    java程序中,新建一个properties文件(以properties为后缀的文件),然后直接将excel中的C列数据copyproperties文件中即可。这样就得到了properties配置文件。

    Properties文件的读取。主要利用Properties类的方法。

    Properties dbcfgProp=new Properties();

    //Properties2Map是程序所在类的名称

    Properties2Map properties2Map=new Properties2Map();

    InputStream is=properties2Map.getClass().getResourceAsStream("/dbconfig.properties");

    dbcfgProp.load(is);

    //得到username对应的值

    System.out.println(dbcfgProp.getProperty("username"));

    3 properties数据存入map

    properties文件的key存到map中的key,对应的value存入map中的value。具体程序如下。

    Enumeration propertyNames = dbcfgProp.propertyNames();

    while(propertyNames.hasMoreElements()){

     String key=propertyNames.nextElement().toString();

     String value=dbcfgProp.getProperty(key);

     dbcfgMap.put(key,value);     

     } 

    4 完整的程序

    public class Properties2Map { 

      public static void main(String[] args) { 

        Properties2Map properties2Map=new Properties2Map(); 

        Properties dbcfgPro = new Properties();

        InputStream dbcfg_in = properties2Map.getClass().getResourceAsStream("/dbcfg.properties");

        BufferedReader bf = new BufferedReader(new    InputStreamReader(dbcfg_in));  

        Map<String, String> dbcfgMap=new HashMap<>();

        try {

          dbcfgPro.load(bf);

          Enumeration propertyNames = dbcfgPro.propertyNames();

            while(propertyNames.hasMoreElements()){

              String key=propertyNames.nextElement().toString();

                 String value=dbcfgPro.getProperty(key);

                dbcfgMap.put(key,value);     

            }

        } catch (IOException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

        }

        //打印出来与excel比对

        for (String key : dbcfgMap.keySet()) {

        System.out.println(key+"="+dbcfgMap.get(key));

        } 

      } 

    }

    5 注意的问题。

    在整个处理过程中,主要的碰到的问题是properties文件的中文乱码问题。一般我们的字符编码都使用UTF-8,可以设置properties文件的编码为UTF-8。在eclipse中,依次选择windows--Preferences--General--Content Types,在右侧选择Text--Java Properties File,然后在编码方式中填写UTF-8,点击UPDATE,然后确定。这样就设置了properties的编码方式。

    再一个就是

    BufferedReader

    bf = new BufferedReader(new    InputStreamReader(dbcfg_in));  

    利用BufferedReaderInputStream进行一次读取,BufferedReader是读取字符串的类,能够避免乱码问题。

    在处理过程中还碰到一个文件,就是excel数据copyproperties文件中后,有文件的直接把中文转变为ASCII码,有的就没有转换,具体原因也不是太了解。对于转换为ASCII码的,可以不用BufferedReader处理,也不会出现乱码,但是没有转换的,必须加上BufferedReader处理,否则会出现乱码。

  • 相关阅读:
    HDU 4069 Squiggly Sudoku
    SPOJ 1771 Yet Another NQueen Problem
    POJ 3469 Dual Core CPU
    CF 118E Bertown roads
    URAL 1664 Pipeline Transportation
    POJ 3076 Sudoku
    UVA 10330 Power Transmission
    HDU 1426 Sudoku Killer
    POJ 3074 Sudoku
    HDU 3315 My Brute
  • 原文地址:https://www.cnblogs.com/coodream2009/p/8422486.html
Copyright © 2011-2022 走看看