我正在尝试读取文本并将其中的每一行保存到ArrayList的新元素中。是否有继续读取和添加ArrayList直到它到达文件末尾或读者找不到任何其他行可读?
另外,什么最好用?扫描仪还是BufferedReader?
传统上,您会执行以下操作:
Scanner
或BufferedReader
Scanner
,通过scanner. hasNextLine()
;使用BufferedReader
,还有一点工作要做)但是,使用Java7的NIO库,您根本不需要这样做。
您可以利用Files#readAllLines
来完成您想要的;不需要自己进行任何迭代。您必须提供文件的路径和字符集(即Charset. forName("UTF-8");
),但它的工作原理基本相同。
Path filePath = Paths.get("/path/to/file/on/system");
List<String> lines = Files.readAllLines(filePath, Charset.forName("UTF-8"));
FWIW,如果您使用的是Java8,则可以使用流API,如下所示
public static void main(String[] args) throws IOException {
String filename = "test.txt"; // Put your filename
List fileLines = new ArrayList<>();
// Make sure to add the "throws IOException" to the method
Stream<String> fileStream = Files.lines(Paths.get(filename));
fileStream.forEach(fileLines::add);
}
我这里有一个main
方法,只需将其放入您的方法中并添加throws
语句或try-catch
块
您也可以将上面的内容转换为一个内衬
((Stream<String>)Files.lines(Paths.get(filename))).forEach(fileLines::add);
尝试像这样使用BufferedReader
:
static List<String> getFileLines(final String path) throws IOException {
final List<String> lines = new ArrayList<>();
try (final BufferedReader br = new BufferedReader(new FileReader(path))) {
string line = null;
while((line = br.readLine()) != null) {
lines.add(line);
}
}
return lines;
}
BufferedReader
上使用try-with-资源语句安全地打开和关闭文件BufferedReader
返回null