【发布时间】:2012-01-19 01:47:18
【问题描述】:
将文本文件读入数组列表的最有效方法是什么(就时间而言)。文件大小为 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.:如果有人可以编辑或改进标签,我真的很感激。
【问题讨论】:
-
首先,您是如何阅读文件的?没有示例代码可以允许任何人用作建议的示例。其次,您期望的标准是什么?
-
不要忘记尝试使用类似 ensureCapacity()
-
stackoverflow 中有一些关于在 Java 中解析制表符分隔文件的问题。我在这里找到了一个:stackoverflow.com/questions/1635764/…
-
你对数据做了什么?如果它进入数据库,您应该使用数据库提供的工具(大多数数据库都这样做)。将大约 2 GB 的数据存储到堆中(当您读取文件时)可能不是一个好主意...通常,如果您必须在 java 中执行此操作,缓冲读取器就可以了。
-
@thotheolh:感谢您的建议。抱歉,我想使用有效的方式读取文件(就时间而言)
标签: java performance file