在Java中读取文本文件

时间:2011-12-31 13:20:21

标签: java bufferedreader

我写了一些代码来读取文本文件并返回一个数组,每行存储在一个元素中。我无法为我的生活解决为什么这不起作用......任何人都可以快速看看吗? System.out.println(行)的输出;是的,所以我猜测读取行有问题,但我不明白为什么。顺便说一句,我传递给它的文件肯定有一些内容!

public InOutSys(String filename) {
    try {
        file = new File(filename);
        br = new BufferedReader(new FileReader(file));
        bw = new BufferedWriter(new FileWriter(file));
    } catch (Exception e) {
        e.printStackTrace();
    }
}



public String[] readFile() { 

    ArrayList<String> dataList = new ArrayList<String>();   // use ArrayList because it can expand automatically
    try {
        String line;

        // Read in lines of the document until you read a null line
        do {
            line = br.readLine();
            System.out.println(line);
            dataList.add(line);
        } while (line != null && !line.isEmpty());
        br.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

    //  Convert the ArrayList into an Array
    String[] dataArr = new String[dataList.size()];
    dataArr = dataList.toArray(dataArr);

    // Test
    for (String s : dataArr)
        System.out.println(s);

    return dataArr; // Returns an array containing the separate lines of the
    // file
}

4 个答案:

答案 0 :(得分:2)

首先,在使用新的FileWriter(文件)打开FileReader后打开FileWriter,该文件以创建模式打开文件。因此,在运行程序后它将是一个空文件。

其次,你的文件中是否有空行?如果是这样,!line.isEmpty()将终止你的do-while-loop。

答案 1 :(得分:1)

您正在将FileWriter用于您正在阅读的文件,因此FileWriter会清除文件的内容。不要同时读写同一个文件。

另外:

  • 不要假设文件包含一行。你不应该使用do / while循环,而是使用while循环;
  • 总是在最后一个街区关闭蒸汽,读者和作家;
  • catch(Exception)是一种不好的做法。只捕获你想要的异常,并且可以处理。否则,让他们上堆。

答案 2 :(得分:1)

我不确定您是否正在寻找一种方法来改进您提供的代码,或者仅仅是为了解决“在Java中读取文本文件”的解决方案,但如果您正在寻找解决方案我建议使用apache commons io为你做这件事。来自readLinesFileUtils方法将完全符合您的要求。

如果你想从一个很好的例子中学习,FileUtils是开源的,所以你可以看看他们如何选择looking at the source来实现它。

答案 3 :(得分:0)

您的问题有几种可能的原因:

  • 文件路径不正确
  • 您不应该尝试同时读/写同一个文件
  • 在构造函数中初始化缓冲区并不是一个好主意,想一想 - 某些方法可能会关闭缓冲区,使其对后续调用或其他方法无效
  • 循环条件不正确

最好尝试这种阅读方法:

try {
    String line = null;
    BufferedReader br = new BufferedReader(new FileReader(file));
    while ((line = br.readLine()) != null) {
        System.out.println(line);
        dataList.add(line);
    }
} finally {
    if (br != null)
        br.close();
}