在java中,当一次读取一个文件时,如何确定EOF?

时间:2013-02-23 20:40:30

标签: java input eof

我不得不暂时阅读并使用算法对每个字母进行编码,然后将它们打印到另一个文件中。我知道通常会找到一个文件的结尾,你会使用readLine并检查它是否为null。我正在使用bufferedReader。无论如何要检查是否还有另一个字符要读?基本上,我怎么知道我只读了文件的最后一个字符?

我想我可以使用readline并查看是否有另一行,如果我知道如何确定我当前行的末尾。

我发现File类有一个名为size()的方法,它假定地转换文件的长度(以字节为单位)。那会告诉我文件中有多少个字符?我能做while(charCount<length)吗?

2 个答案:

答案 0 :(得分:10)

我并不完全明白你想做什么。我想你可能想逐个字符地阅读文件。如果是这样,你可以这样做:

FileInputStream fileInput = new FileInputStream("file.txt");
int r;
while ((r = fileInput.read()) != -1) {
   char c = (char) r;
   // do something with the character c
}
fileInput.close();
当没有更多要阅读的字符时,

FileInputStream.read()会返回-1。它返回int而不是char,因此强制转换。

请注意,如果您的文件采用UTF-8格式且包含多字节字符,则无法使用此功能。在这种情况下,您必须将FileInputStream包装在InputStreamReader中并指定相应的字符集。为简单起见,我在这里省略它。

答案 1 :(得分:0)

根据我的理解,如果没有剩下的字符,缓冲区将返回-1。所以你可以写:

BufferedInputStream in = new BufferedInputStream(new FileInputStream("filename"));
while (currentChar = in.read() != -1) { 
    //do something 
}
in.close();