繁体   English   中英

在Java中读取文本文件

[英]Reading in text file in Java

我写了一些代码来读取文本文件并返回一个数组,每行存储在一个元素中。 我无法为我的生活解决为什么这不起作用......任何人都可以快速看看吗? 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
}

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

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

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

也:

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

我不确定你是否正在寻找一种方法来改进你提供的代码,或者仅仅是为了解决“阅读Java中的文本文件”的解决方案,但如果你正在寻找一个解决方案,我建议你使用apache commons io为你做。 readlines方法从方法文件实用程序将不正是你想要的。

如果您希望从一个好的示例中学习,FileUtils是开源的,因此您可以通过查看源代码来了解他们如何选择实现它。

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

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

最好尝试这种阅读方法:

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM