【问题标题】:Java adding file contents to array listJava将文件内容添加到数组列表
【发布时间】:2018-01-25 10:42:38
【问题描述】:

您好,我是 Java 新手,使用文件。我有一个名为banking.txt 的文本文件位于C:,但是当我尝试将其内容放入ArrayList 并打印时,它什么也没有打印出来。是我使用的文件路径不正确还是有什么不同?

import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;

public class FileP {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner read = new Scanner(new File("C:\\banking.txt"));
        ArrayList<String> myList = new ArrayList<String>();
        while(read.hasNextLine()) {
            myList.add(read.nextLine());
        }
        System.out.println(myList);
    }
}

【问题讨论】:

  • “它什么也没有打印出来”:这很难相信。你到底得到了哪个输出?
  • 这应该可行。可能是权限问题。有输出吗?
  • 相关:Java reading a file into an ArrayList? 虽然没有投票关闭作为重复项,因为您的代码应该可以工作或抛出异常(在列表中没有得到任何内容应该意味着文件为空)。
  • 您可以检查您的文件 1) 是否存在以及 2) 是否可以读取。检查这个例子:ideone.com/7NckQf
  • 我可以通过在 Scanner 构造函数中尝试读取相同的系统文件(在 Win 7 上)尝试 FileFileReader 来重现这一点 - 一个打印一个空的 ArrayList,另一个打印文件内容。两者之间可能存在一些权限差异,但我无法告诉您确切的问题是什么。

标签: java


【解决方案1】:

尝试使用 InputStream

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.io.InputStream;
    import java.io.InputStreamReader;

    public class FileP {

      public static void main(String[] args) throws IOException {

        ArrayList<String> myList = new ArrayList<String>();
        InputStream is = new FileInputStream("C:\\banking.txt");
        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
        String line = buf.readLine();
        StringBuilder sb = new StringBuilder();
        while (line != null)

        {
          myList.add(line);
          line = buf.readLine();
        }

       System.out.println("myList : " + myList);
      }
    }

【讨论】:

  • 这行得通,但正如其他人所说,我的做法也应该行得通。
【解决方案2】:

我猜你需要将此代码用作Scanner

Scanner in = new Scanner(new FileReader("C:\\banking.txt"));

这会将文件作为字符串读取,您可以将其添加到数组中。 查看这篇文章了解更多信息: Reading a plain text file in Java

【讨论】:

  • 为什么这会解决问题? Scanner 有一个接受 File 的构造函数。
  • 我不确定,但是对我的代码进行了这个修改,它都被打印出来了。
  • 你能用你以前的代码再试一次吗?因为它也必须工作。
  • 我已经尝试过了,我撤消了所有更改并打印了 { } 然后我再次切换回此代码并正确打印我什至切换到 netbeans 和同样的东西。
  • 杜克林。检查这两个链接以了解“new File()”和“new FileReader()”之间的区别。 docs.oracle.com/javase/7/docs/api/java/io/File.htmldocs.oracle.com/javase/8/docs/api/?java/io/FileReader.html
【解决方案3】:

我会推荐使用 Java 8 的 lines 方法:

 Stream<String> content = Files.lines("C:\\banking.txt")
 content.forEach(System.out::println);

【讨论】:

  • 与 CodeMatrix 的评论相同:很好的建议,但没有明显的理由可以解决 OP 的问题。
  • 只是为了迂腐,正确的做法是:try (Stream&lt;String&gt; content = Files.lines("C:\\banking.txt")) { content.forEach(System.out::println); }。这可确保文件在完成后关闭。
猜你喜欢
  • 2021-12-01
  • 2021-09-06
  • 1970-01-01
  • 2020-07-18
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多