-1
public class readBin {
public static void main(String[] args) throws IOException{
    long time1 = System.currentTimeMillis();


File targetfile = new File("d:\\d2012.bin");
    FileInputStream in = new FileInputStream(targetfile);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    byte[] buffer = new byte[2097152];
    int byteread = 0;
    String bufferString = "";

    ArrayList<HashMap> arr = new ArrayList<HashMap>();
    ArrayList arrstr = new ArrayList();
    HashMap hashmap = new HashMap();
    ArrayList<String> cttarr = new ArrayList<String>();
    String[] strarr = new String[2];
    ArrayList<String> valarr = new ArrayList<>();
    //It's all init above,below comes the file reading
    bufferString = br.readLine();
    while(bufferString != null){
        //if data readed this line from the file is not "*newrecord" or ""
        if(!bufferString.equals("*NEWRECORD")&&!bufferString.equals("")){
            //according to the need,make use of these data
            strarr = bufferString.split("=");
            switch (strarr[0].trim()) {
            case "UI":
                hashmap.put(strarr[0].trim(), strarr[1].trim());
                break;
            case "MH":
                hashmap.put(strarr[0].trim(), strarr[1].trim());
                break;
            case "AQ":
                String[] valuearr = strarr[1].split(" ");
                hashmap.put(strarr[0], valuearr);
                break;
            case "ENTRY":
                bufferString = bufferString.split("\\|")[0].toString();
                //if key named ENTRY has already existed,update the data
                if (hashmap.containsKey(strarr[0].trim())) {
                    ArrayList<String> templist = ((ArrayList<String>)hashmap.get(strarr[0].trim()));
                    templist.add(bufferString.split("=")[1].trim());
                    hashmap.put(strarr[0].trim(), templist);
                //or insert it 
                } else {
                    cttarr.add(bufferString);
                    hashmap.put(strarr[0].trim(),cttarr);
                }
                break;
            case "MS":
                hashmap.put(strarr[0].trim(), strarr[1].trim());
                break;
            case "MN":
                //as ENTRY do
                if (hashmap.containsKey(strarr[0].trim())) {
                    ArrayList<String> templist =     ((ArrayList<String>)hashmap.get(strarr[0].trim()));
                    templist.add(strarr[1].trim());
                    hashmap.put(strarr[0].trim(), templist);
                } else {
                    cttarr.add(strarr[1].trim());
                    hashmap.put(strarr[0].trim(),cttarr);
                }
                break;

            default:
                break;
            }
        } else if(hashmap.size() != 0) {
            //if it equals to *newrecord or "",init the hashmap again
            arr.add(hashmap);
            hashmap = new HashMap();
        }
        bufferString = br.readLine();
        if (bufferString == null) {
            arr.add(hashmap);
        }
    }
    ArrayList arrresult = arr;
    long time2 = System.currentTimeMillis();
    System.out.println(time2-time1);
    String ui = (String) arr.get(0).get("MH");
    ArrayList<String> entrys = (ArrayList<String>) arr.get(0).get("ENTRY");
    int len = arr.size();
    System.out.println(ui);
    System.out.println(len);
}

public String getbs(){
    return "";
}
}

ハッシュマップをarrayListに更新した後、ファイルからデータを繰り返してハッシュマップに追加したいのですが、結果から、ハッシュマップのデータがクリアされないようです。

4

2 に答える 2

0

new HashMap() が以前のインスタンスからのデータを保持することは知られていないため、明らかに

    } else if(hashmap.size() != 0) {
        //if it equals to *newrecord or "",init the hashmap again
        arr.add(hashmap);
        hashmap = new HashMap();
    }

実行したいときに実行されません。したがって、入力ファイルの形式を確認するか、デバッグを試みてください。

于 2012-07-04T09:55:54.343 に答える
0

わかりました,英語を上手に学ぶことがいかに重要かが分かりました。

コレクションでは、エンティティではなく常に参照であるため、このようにコードを記述しないでください。

ArrayList<String> templist = ((ArrayList<String>)hashmap.get(strarr[0].trim()));

ArrayList<String> templist = new ArrayList<String>((ArrayList<String>)hashmap.get(strarr[0].trim()));にすると、うまくいきます。

于 2012-07-05T05:19:26.560 に答える