【发布时间】:2026-01-29 16:55:01
【问题描述】:
我发现FileReader 扫描文件only 一次。之后,如果您需要在程序中,您必须关闭它并重新初始化它以重新扫描文件。我在其他博客和 * 问题中读到过这一点,但其中大多数都提到了BufferedReader 或其他类型的读者。问题是我已经使用FileReader 完成了我的程序,并且我不想将所有内容都更改为BufferedReader,所以无论如何都可以在不引入任何其他类或方法的情况下重置文件指针?或者无论如何只是在我已经存在的FileReader 周围包裹一个BufferedReader?这是我专门为这个问题编写的一个小代码,如果我可以将BufferedReader 包裹在我的FileReader 周围,我希望你用这个代码sn-p 来做。
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Files {
public static void main(String args[]) throws IOException{
File f = new File("input.txt");
FileReader fr = new FileReader(f);
int ch;
while((ch = fr.read()) != -1){
// I am just exhausting the file pointer to go to EOF
}
while((ch = fr.read()) != -1){
/*Since fr has been exhausted, it's unable to re-read the file now and hence
my output is empty*/
System.out.print((char) ch);
}
}
}
谢谢。
【问题讨论】:
-
BufferedReader并不能真正解决问题。您必须使缓冲区如此之大,以使整个文件都保存在内存中。重新打开文件有什么不好? -
哦,我明白了。我对重新打开没有问题,事实上,我可能只需要在我的程序中重新打开它 1-2 次,但我只是想避免冗余代码,并希望我能在这里找到任何答案。重新开放是我最后的手段,以防我在这里没有得到任何答案,或者我最终无法执行这里给出的答案。谢谢
-
你可以试试
reset()。但是,跨平台兼容性没有硬性保证。 -
@JoopEggen 它在我的机器上不起作用,我想这是平台兼容性问题。它说 java.io.IOException: reset() not supported.
标签: java file-io bufferedreader reset filereader