话说我们项目决定把游戏数据静态文件都从csv读取,所以就写了这个类了,非常简单的,可以把csv的一行映射到一个pojo上
上代码!!
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import com.pywap.engine.utils.StringUtils;
import com.pywap.test.TestCvs;
/**
* 读取csv内容并映射成pojo
*
* csv格式如下
* * name missionId
中广播 1
中广播 2
中广播d 3
中广播e 4
中广播asd 5
中广播 6
中广播 7
中广播 8
中广播 9
中广播 10
中广播 11
*
* @author javagg
*
*/
public class CSVTool {
private static final String _SPLIT = ",|\t";
private static final String _DEF_ENCODE = "utf-8";
public static Listpaser(String file, Class obj) throws Exception {
return paser(new File(file), obj, _DEF_ENCODE);
}
public static Listpaser(String file, Class obj, String encoding)
throws Exception {
return paser(new File(file), obj, encoding);
}
public static Listpaser(File file, Class obj, String encoding)
throws Exception {
if (!file.exists())
new FileNotFoundException(file.getName());
Listlist = new ArrayList();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding));
String[] colname = br.readLine().split(_SPLIT);
String str = null;
Method[] methods = new Method[colname.length];
while ((str = br.readLine()) != null) {
String[] ss = str.split(_SPLIT);
if (ss.length != colname.length)
throw new RuntimeException("paser file:" + file.getName() + " error at " + (list.size() + 1));
Object o = obj.newInstance();
for (int i = 0; i < colname.length; i++) {
if (methods[i] == null)
methods[i] = obj.getMethod(StringUtils.toSetMethod(colname[i]), String.class);
methods[i].invoke(o, ss[i]);
}
list.add(o);
}
for (Method m : methods) {
m = null;
}
br.close();
return list;
}
public static void main(String[] args) {
try {
Listlist = paser("e:/work1/TestBean.csv", TestCvs.class, "GBK");
for (Object o : list) {
TestCvs t = (TestCvs) o;
System.out.println(t.getName() + ":::" + t.getMissionId());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
搞定,呵呵,一个类几十行代码就行了