将文本文件读入数组列表的最有效方法(就时间而言)是什么。文件大小为100 mb到2 gb。该文件包含以下格式化的数据:
From TO time
a b 13 decc 2009
b c 13 decc 2009
c d 13 decc 2009
f h 13 decc 2009
f g 13 decc 2009
修改 以下是读取文件的代码
public List<InputDataBean> readInputData() throws Exception{
List<InputDataBean> dataSet = new ArrayList<InputDataBean>();
FileInputStream fstream = null;
BufferedReader br = null;
try{
fstream = new FileInputStream(filePath);
br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
Set<String> users = new TreeSet<String>();
while ((strLine = br.readLine()) != null) {
InputDataBean data = validateRecord(strLine);
if(data==null)
continue;
dataSet.add(data);
users.add(data.getFromName());
users.add(data.getToName());
}
UserKeys.setUsers(users);
}catch (Exception e){
throw e;
}finally{
try {
if(null!=br)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return dataSet;
}
读取文件后,我想将数据存储到数据库中。
如果有任何其他更好的替代方案来阅读文件?从java程序调用脚本并使用脚本读取数据并存储到java数组中是个好主意。
P.S。:如果有人可以编辑或改进标签,我真的很感激。
答案 0 :(得分:3)
可能在FileInputStream周围包裹BufferedInputStream
将进一步提高性能(因为读取将以4 KB的倍数进行缓冲)。你也可以用缓冲区大小来玩。
如果您知道它只是ASCII,则可以避免使用Reader
,并可能避免为每一行创建String
。
如果您有时间,我会将您的解决方案的性能与现有的CSV阅读器工具进行比较,例如CSV tool from the H2 database(披露:我写了它)。