如何在java中重置FILEREADER的指针

时间:2015-10-08 09:56:30

标签: java

我们可以通过两种方式阅读文本文件。第一种方式来自文件读取器,第二种方式是bufferedreader(仅在其核心使用文件读取器)。我试图从FILEREADER类实现文件阅读器。这是我的实施。

读一行 -

public static String readLine(FileReader fr) throws IOException {
    int i = fr.read();
    StringBuffer strb = new StringBuffer();
    while (i != 10 && i != -1) { // 10 for detecting new line and -1 for End of File
        strb.append(((char) i));
        i = fr.read();
    }
    String returnvalue = strb.toString();
    return returnvalue;
}

读取行数 -

public static int readLines(FileReader fr) throws IOException {
    int numberOfLines = 0;
    while (!readLine(fr).isEmpty()) {
        numberOfLines++;
    }
    return numberOfLines;
}

这是主要方法 -

public static void main(String[] args) throws IOException {
    String path = System.getProperty("user.dir") + "\\src\\files\\lines.txt";

    openFile(path);
    int total = readLines(fr);
    String[] str = new String[total];

    for (int i = 0; i < total; i++) {
        str[i] = readLine(fr);
    }

    for (String s : str)
        System.out.print(s);
}

但问题是当我第一次调用fr.readLines(Filereader fr)时它将filereader的指针带到文件的末尾然后当我正在做fr.readLine(Filereader fr)时它会进入一个无限循环。

我的问题是 - 如何将filereader的指针再次重置为文件的开头。 ?

先谢谢。

2 个答案:

答案 0 :(得分:0)

您正在将文件读取到文件末尾,然后每次读取都会返回文件末尾。

这里唯一的谜是为什么你会感到惊讶。为什么你要做任何一件事。 BufferedReader已经存在,使用了比您更好的readLine()方法,并且您无需事先知道数字或行:使用Collection存储它们,如果确实是确实需要同时在内存中存储文件的所有行,这是另一种不好的做法。

答案 1 :(得分:0)

你不需要两个单独的方法来计算行数并从文件中读取每个字符。

使用java.io.BufferedReader同时执行读取行和计数行。

此致 P