提问者:小点点

如何将txt行复制到java的ArrayList中?


我正在尝试读取文本并将其中的每一行保存到ArrayList的新元素中。是否有继续读取和添加ArrayList直到它到达文件末尾或读者找不到任何其他行可读?

另外,什么最好用?扫描仪还是BufferedReader?


共3个答案

匿名用户

传统上,您会执行以下操作:

  • 创建ScannerBufferedReader
  • 的实例
  • 设置条件以连续读取文件(使用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
  • 返回列表