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 "";
}
}
I want to iterate the data from the file and add them to the hashmap,after updating the hashmap to the arrayList,init the hashmap again.but from the result ,it seems the data in the hashmap wont clear.
OK,Now I know how important it is to learn English well.
I got the point now,in collection ,it is always reference instead of entity,so I shouldn’t write code as this
ArrayList<String> templist = ((ArrayList<String>)hashmap.get(strarr[0].trim()));when I turned it to
ArrayList<String> templist = new ArrayList<String>((ArrayList<String>)hashmap.get(strarr[0].trim()));,it runs good.