个人学习,有误的地方望指正,谢谢!!!
1、CsvParse.java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java_test.MapValue;
public class CsvParse {
private InputStreamReader fr = null;
private BufferedReader br = null;
public CsvParse(String f) throws IOException {
fr = new InputStreamReader(new FileInputStream(f));
}
public List<List<String>> csvReader() throws IOException {
br = new BufferedReader(fr);
String rec = null;
List<List<String>> listFile = new ArrayList<List<String>>();
try {
while ((rec = br.readLine()) != null) {
String[] list = rec.split(",");
List<String> cells = Arrays.asList(list);
listFile.add(cells);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
}
return listFile;
}
public Map<String, Map<String,Object>> ToMap(List<List<String>> arr){
Map<String, Map<String,Object>> map = new HashMap<String, Map<String,Object>>();
if(arr.size() <= 0){
return map;
}
List<String> keyList = arr.get(0);
for(int i=1;i<arr.size();i++){
Map<String,Object> subMap = new HashMap<String, Object>();
for(int j=1;j<keyList.size();j++){
Object value = arr.get(i).get(j);
MapValue mp = new MapValue(value);
subMap.put(keyList.get(j), mp.getValue());
}
map.put(arr.get(i).get(0), subMap);
}
return map;
}
public static void main(String[] args) throws Throwable {
CsvParse test = new CsvParse("E:\\box.csv");
List<List<String>> csvList = test.csvReader();
Map<String, Map<String,Object>> map = test.ToMap(csvList);
// System.out.println(map);
Iterator<?> iter = map.entrySet().iterator();
while (iter.hasNext()) {
@SuppressWarnings("rawtypes")
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
System.out.println(key+":"+val);
}
}
}
2、MapValue.java
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MapValue {
private Object value = null;
public MapValue(Object value)
{
this.value = value;
}
public Object getValue(){
String str = this.value.toString();
if(str.contains(">")){
return this.ListResult(str);
}else{
try{
return this.IntegerResult(str);
}
catch(NumberFormatException e){
return str;
}
}
}
private Integer IntegerResult(String str){
return Integer.valueOf(str);
}
private List<Object> ListResult(String str){
String[] list1 = str.split(">");
List<Object> list2 = new ArrayList<Object>();
Pattern pattern = Pattern.compile("[0-9]*");
for(int i=0;i<list1.length;i++){
Matcher isNum = pattern.matcher(list1[i]);
if(isNum.matches()){
list2.add(Integer.valueOf(list1[i]));
}else{
list2.add(list1[i]);
}
}
return list2;
}
}