我们可以通过两种方式阅读文本文件。第一种方式来自文件读取器,第二种方式是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的指针再次重置为文件的开头。 ?
先谢谢。
答案 0 :(得分:0)
您正在将文件读取到文件末尾,然后每次读取都会返回文件末尾。
这里唯一的谜是为什么你会感到惊讶。为什么你要做任何一件事。 BufferedReader
已经存在,使用了比您更好的readLine()
方法,并且您无需事先知道数字或行:使用Collection
存储它们,如果确实是确实需要同时在内存中存储文件的所有行,这是另一种不好的做法。
答案 1 :(得分:0)
你不需要两个单独的方法来计算行数并从文件中读取每个字符。
使用java.io.BufferedReader同时执行读取行和计数行。
此致 P