【问题标题】:In java, when reading in a file one character at a time, how do I determine EOF?在java中,一次读取一个文件时,如何确定EOF?
【发布时间】:2013-02-23 20:40:30
【问题描述】:

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

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

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

【问题讨论】:

  • 虽然(我不在文件的最后一个字符处){ BufferedWriter.print(char) }
  • 是否要附加到现有文件?

标签: java input eof


【解决方案1】:

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

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 中并指定适当的字符集。为了简单起见,我在这里省略了它。

【讨论】:

  • 但是是的,我想逐个字符地真实我的文件,但显然我想在我用完字符时停止
  • 我知道如何逐个字符地读取。我只需要知道什么时候停止
  • 哦,我仔细查看了 API,您的回答完全正确。谢谢! “在流结束时”返回 -1
  • 好的,很高兴知道!如果它解决了您的问题,请考虑接受答案。
  • FileInputStream 是字节流,不应用于字符。对字符使用 FileReader。
【解决方案2】:

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

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

【讨论】:

  • 和上面@gdt1的回答差不多。
  • 由于运算符优先级,它甚至是错误的。幸运的是,在 Java 中,boolean 不能隐式转换为 char,否则该代码会导致严重的错误。
猜你喜欢
  • 2016-03-09
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2020-07-10
相关资源
最近更新 更多