paavochan 2017-02-06 02:48 采纳率: 60%
浏览 3501
已结题

在java中如何读取文件里的内容和特定的值进行比较后存放到数据库?

我先在这里说一下目前在做的这样一个功能:
读取以下内容类似的一个文件,然后通过=号分割,将分割后的值前面一部分以及后面一部分放在map里面,后添加到了一个List里面。
现在我是想要把这个读取后添加的List拿出来进行比较,通过取里面map的key来进行比较:如果是相同的,那就将val拿出来放到另外一个map里面,进行入库。

1.3.6.1.2.1.1.2.0 = 1.3.6.1.4.1.9.12.3.1.3.411
1.3.6.1.2.1.1.3.0 = 173 days, 10:36:40.88
1.3.6.1.2.1.1.4.0 =
1.3.6.1.2.1.1.5.0 = mds9140-h02-n18-1
1.3.6.1.2.1.1.6.0 =
1.3.6.1.2.1.1.7.0 = 70
1.3.6.1.2.1.2.2.1.1.16777216 = 16777216
1.3.6.1.2.1.2.2.1.1.16781312 = 16781312
1.3.6.1.2.1.2.2.1.1.16785408 = 16785408

以下是我读取的代码:
List fileList = getFileList();
List list = new ArrayList();
for (Object object : fileList) {
Map valMap = new HashMap();
Map map = (Map)object;

        String key = map.keySet().toString();
        String val = map.values().toString();
        val.replaceAll(" ", "");

        if(val!=null ){
            if(key.contains("1.3.6.1.2.1.1.5")){
                valMap.put("Name", val);
            }else if(key.contains("1.3.6.1.2.1.2.1")){
                valMap.put("portnumber", val);
            }else if(key.contains("1.3.6.1.2.1.2.2.1.1")){
                valMap.put("portindex", val);
            }else if(key.contains("1.3.6.1.2.1.31.1.1.1.1")){
                valMap.put("portfcvalue", val);
            }else if(key.contains("1.3.6.1.2.1.2.2.1.3")){
                valMap.put("porttype", val);
            }
            if(valMap != null && valMap.size()>0){
                list.add(valMap);
            }
        }
    }

    我写的这段代码,在匹配1.3.6.1.2.1.2.2.1.1 的时候回匹配到很多个,匹配的字符不止我写的这几个,还有很多,想请问下有没有什么简便方法用来比较字符后进行入库操作,还望大神指教,谢谢!!!
  • 写回答

4条回答 默认 最新

  • 薛凌康 2017-02-06 04:29
    关注

    package a;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;

    import org.junit.Test;

    public class A {

    /** 文件的一行记录为一个对象 */
    public class Line {
        public String key;
        public String val;
        public Line() {}
        public Line(String key, String val) {
            this.key = key;
            this.val = val;
        }
    }
    
    @Test
    public void test() {
        //逐行读取文件, 每行保存为一个map(或者保存为一个对象), 读取文件的步骤省略, 以下为模拟读取文件过程
        //第一行
        Line line1 = new Line("a", "1");
        //第二行
        Line line2 = new Line("b", "2");
        //第三行
        Line line3 = new Line("a", "3");
        //第四行
        Line line4 = new Line("b", "4");
        //第五行
        Line line5 = new Line("a", "5");
        //文件内容
        List<Line> fileContent = new ArrayList<Line>();
        fileContent.add(line1);
        fileContent.add(line2);
        fileContent.add(line3);
        fileContent.add(line4);
        fileContent.add(line5);
        //模拟读取文件并存入集合结束
    
        //处理结果
        Map<String, List<String>> result = new HashMap<String, List<String>>();
    
        //处理过程
        for (Line line: fileContent) {
            //当前行的key
            String key = line.key;
            //结果中已经存在的key集合
            Set<String> keys = result.keySet();
            if (key!=null && !"".equals(key)) {
                //开关
                boolean flag = false;
                for (String k: keys) {
                    if (key.equals(k)) {
                        flag = true;
                        break;
                    }
                }
                if (flag) {//如果结果中存在相同的key, 将这一行的val添加到集合
                    result.get(key).add(line.val);
                } else {//否则新建一个键值对
                    List<String> list = new ArrayList<String>();
                    list.add(line.val);
                    result.put(key, list);
                }
            }
        }
        System.out.println("处理结果" + result);
    }
    

    }

    控制台输出:处理结果{b=[2, 4], a=[1, 3, 5]}

    楼主看看是否符合你的需求

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序