3

我有这行代码。并且 numbers.txt 有一个由这些数字组成的字符串:123456789。运行它会打印:235689。为什么?.read() 做什么?当'while(fin.read() > -1 )' 为真时?还有关于异常为什么我在不使用它时得到 IOException 错误,因为程序是正确的?

import java.io.*;

public class Read {


    public static void main(String[] args) throws Exception {



        FileReader fin = new FileReader("numbers.txt");

        while(fin.read() > -1 ){

         System.out.print((char) fin.read());
         System.out.print((char) fin.read());

        }
        fin.close(); 


    }

}
4

3 回答 3

4

您正在丢弃每三个字符。我建议存储您阅读的字符并打印它。

for(int ch; (ch = fin.read()) > -1; )
     System.out.print((char) ch);

我建议您像这样使用 BufferedReader

try(BufferedReader br = new BufferedReader(new FileReader("numbers.txt"))) {
    for(String line; (line = br.readLine()) != null; )
        System.out.println(line);
} // closes the br
于 2013-06-14T00:40:54.603 回答
2

Read 将从 中读取的值InputStream作为int值返回。

您正在阅读超出文件末尾的内容。

您应该读取该值并将其存储到您可以使用的变量中...

FileReader fin = null
try {
    fin = new FileReader("numbers.txt");
    int in = -1;
    while((in = fin.read()) > -1 ){
        System.out.print((char)in);
    }
} finally {
    try {
        fin.close(); 
    } catch (Exception exp) {}
}

我建议您仔细查看基本 I/O以了解更多详细信息

ps-如果你打开一个流,你应该关闭它;)

于 2013-06-14T00:41:46.727 回答
0

FileReader.read() 根据默认编码从文件中读取一个或多个字节,将其转换为 char,将 char 转换为 int 并返回。如果达到 EOF,则返回 -1。这是从 Reader 读取直到 EOS 的方法。

for(int c; (c = rdr.read()) != -1;) {
     System.out.print((char)c);
}
于 2013-06-14T01:22:31.513 回答