我有一个由数据行组成的数据文件,换行符分隔。我需要将文件的内容读入一个字符串数组,我想以正确的大小有效地创建数组。
最有效率答案 0 :(得分:5)
使用ArrayList
(您的选项#1)。使用BufferedReader
的{{1}}方法逐行读入文本文件。它简单,高效且易于维护。
答案 1 :(得分:2)
这取决于文件的大小以及您需要的效率:
ArrayList是一个简单而有效的选项。只需创建一个新实例,然后逐个从BufferedReader添加字符串。然后在此列表中调用toArray()。
将整个文件作为字符串读取并手动拆分(我相信更高效)或者将java.lang.String提供的regexp拆分为字符串数组。如果您手动执行此操作,则可以计算“\ r \ n”符号的数量并创建具有确切大小的数组(即,您将保存数组列表重新分配)。
答案 2 :(得分:2)
您可以使用ArrayList并使用以下方法来优化它的大小:
此外,如果您知道每行的平均大小,您可以尝试确定基于文件长度的数组大小(file_size / line_avg_size)。
答案 3 :(得分:2)
ArrayList比你的第二个更好。
当有经过验证的解决方案时,我不想用我自己的代码重新发明轮子。
答案 4 :(得分:1)
最好的办法是用一个操作读入整个文件。这是因为磁盘IO通常相对较慢,并且可能是应用程序中最慢的部分。将整个文件读入一个大字符串,然后在新行标记('\ n')上split。这可能是最简单,最有效的方法。 Split()将为您生成一个包含数据的字符串数组。
答案 5 :(得分:1)
创建一个编写器,用于计算写入的字符数,并使用它来包装OutputStreamWriter。
注意:将文本保存到文件的正确方法是:
new BufferedWriter( new OutputStreamWriter( new FileOutputStream( file ), encoding ) ) );
编码很重要;它通常是“UTF-8”。
这个链为您提供了两个可以注入包装器的地方:您可以包装编写器以获取字符数,或者包裹内部OutputStream
以获取写入的字节。
答案 6 :(得分:0)
3:使用Scanner(自1.5起):懒惰(但是恶意)的程序员工具,具有字符串扫描目的所需的所有选项,并且对所有文件都有效。