【问题标题】:Java 8 - How to read file line by line in java?Java 8 - 如何在java中逐行读取文件?
【发布时间】:2016-05-15 04:00:19
【问题描述】:

我已经看到有人问过这类问题,但他们似乎没有回答我的问题。 :(

我有一个文本文件“file.txt”,它的内容是这样的

abcd
呵呵
伊克尔

现在我想要那个,在我的程序中由不同的字符串变量存储的不同类型的行
例如

String firstLine , String secondLine , ThiredLine;

当我在字符串上方打印时,输出将是

firstLine :: abcd & secondLine :: efgh & thiredLine :: ijkl

是否可以使用 readLine() 方法或任何其他方法来做到这一点?

提前致谢 :)

【问题讨论】:

  • 所以文件只有三行?我不认为拥有与行一样多的变量是解决任何问题的好方法。你想用这些变量做什么?
  • 这是“Store Player Runs in cricket” 11 player 的一部分; 11行;和 11 个变量 ;)
  • “是否可以使用readLine()方法来做到这一点?”是的。

标签: java bufferedreader


【解决方案1】:

您可以在 java api 中引用 java.nio.file.Pathjava.nio.file.Files 类。
你可以得到关于这个问题的答案。
第一步,您应该通过文件路径获取 Path 对象。
第二步,您可以通过 Files.readAllLines(Path path) 方法逐行读取内容。 下面的例子:

   Path path = FileSystems.getDefault().getPath(filePath);
   List<String> datas = Files.readAllLines(path)

【讨论】:

    【解决方案2】:

    如果你真的想这样做,你可以这样写你的代码:

    Scanner sc = new Scanner("file.txt");
    String firstLine = sc.nextLine();
    String secondLine = sc.nextLine();
    String thirdLine = sc.nextLine();
    

    但是,使用数组和for 循环会更方便:

    Scanner sc = new Scanner("file.txt");
    String[] lines = new String[3];
    for (int i=0; i<lines.length; i++) {
        lines[i] = sc.nextLine();
    }
    

    或者,您可以使用ArrayListwhile 循环。这样做的好处是无论文件中有多少行,这段代码都可以工作:

    Scanner sc = new Scanner("file.txt");
    ArrayList<Sting> lines = new ArrayList<>();
    while (sc.hasNextLine()) {
        lines.add(sc.nextLine());
    }
    

    【讨论】:

      【解决方案3】:

      您要采用的方法似乎有点粗糙。还有很多其他方法可以做到这一点。许多其他人已经提交了答案,但这里有一个替代答案。

      另外请注意,从 Java 7 开始,现在为实现 AutoCloseable 接口的类提供了自动资源管理。

      话虽如此,这是一种方法。

          String[] lines = new String[11];  //11 players
          try (BufferedReader reader = new BufferedReader(new FileReader("file path here"))) {
              String line = null;
              int index = 0;
              while ((line = reader.readLine()) != null) {
                  lines[index++] = line;
              }
          } catch (IOException e) {
              System.out.println(e.getMessage());
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        相关资源
        最近更新 更多