在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 的时候回匹配到很多个,匹配的字符不止我写的这几个,还有很多,想请问下有没有什么简便方法用来比较字符后进行入库操作,还望大神指教,谢谢!!!

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]}

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

出现你这种情况很正常啊,你先要搞清楚contains的定义,它是指前面的字符串包含后面的字符串就返回true,反之false,如果一个key包含1.3.6.1.2.1.2.2.1.1,那么它必然也包含1.3.6.1.2.1.2.1这样不就多添加了吗。

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**

  • @author 熊浪
  • @创建时间2016年9月26日
  • @Email xiongl@sunline
  • @此类的作用
    */
    public class Test {
    public static void main(String[] args){
    try {
    copyFileUsingFileStreams("D:/eclipse/1.txt");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    private static void copyFileUsingFileStreams(String path)
    throws IOException {

    InputStream input = null;
    InputStreamReader inputRead=null;
    BufferedReader read=null;
    String line="";//读取的每行数据
    Map map=new HashMap();
    try {
    input = new FileInputStream(new File(path));//字节流
    inputRead=new InputStreamReader(input);//字节流通向字符流的桥梁
    read = new BufferedReader(inputRead);//字符流

    while ((line=read.readLine())!= null) {//每次读取一行且读取的内容不为null
    map=getAllMap(map, line);//递归添加
    }
    List> list = getAllList(map);
    for (int i = 0,len=list.size(); i < len; i++) {
    //遍历map
    }
    } finally {
    input.close();
    }
    }

    private static Map getAllMap(Map map,String line){
    String[] strs = line.split("=");
    if(strs[1]!=null || !" ".equals(strs[1])){//去掉val是" "的。
    map.put(strs[0], strs[1]);
    }
    return map;
    }

    private static List> getAllList(Map map){
    List> list = new ArrayList>();
    Map valMap = new HashMap();
    Set keys = map.keySet();
    Iterator it = keys.iterator();
    String key="",val="";
    while(it.hasNext()){
    key=it.next();
    val=map.get(key);
    if(key.length()>="1.3.6.1.2.1.1.5".length() && key.contains("1.3.6.1.2.1.1.5")){
    valMap.put("Name", val);
    }else if(key.length()>="1.3.6.1.2.1.2.1".length() && key.contains("1.3.6.1.2.1.2.1")){
    valMap.put("portnumber", val);
    }else if(key.length()>="1.3.6.1.2.1.2.2.1.1".length() && key.contains("1.3.6.1.2.1.2.2.1.1")){
    valMap.put("portindex", val);
    }else if(key.length()>="1.3.6.1.2.1.31.1.1.1.1".length() && key.contains("1.3.6.1.2.1.31.1.1.1.1")){
    valMap.put("portfcvalue", val);
    }else if(key.length()>="1.3.6.1.2.1.2.2.1.3".length() && 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);
    }
    }
    return list;
    }
    }

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
这三个里面都同时包含1.3.6.1.2.1.2.2.1.1,contains是包含的意思*1.3.6.1.2.1.2.2.1.1*,如果字符串是固定的可以用equals去判断

楼主的意思是想少写if else? 那么可以把你要匹配的字符串用mpa存起来循环map来匹配.