我知道正确的方法是

BufferedReader br = new BufferedReader(FileReader(file));
.

但我在java api中检查了FILEREADER类的方法,它具有返回字符读取的世代odicetagcode方法。但这对我来说不起作用。我正在阅读一个文件,其中包含此文字行:“我正在读取文件”,并将其打印到屏幕上,但是当我运行程序时,它将为每个字符打印等效的ASCII代码。

这是我的代码:

String lectura = "";
try{
    lectura = String.valueOf(fr.read());
} catch(IOException ioex){
    ioex.printStackTrace();
}

while((Integer.parseInt(lectura)) != -1){
    System.out.print(lectura);
    try{
        lectura = String.valueOf(fr.read());
    } catch(IOException ioex){
        ioex.printStackTrace();
    }
}
.

有帮助吗?

解决方案

发生了什么 -

fr.read()返回整数而不是字符,尽管返回的整数是该字符的等效ASCII代码。

当您在该整数上调用string.valueof()时,string.valueof(int i)方法被调用,而不是您期望被调用的字符串.ValueOf(char c)方法,因此它返回ASCII值作为字符串,而不是字符值作为字符串。

所以相反,请尝试

    lectura = String.valueOf( (char) (fr.read()) );
.

其他提示

这是预期的行为,文本存储为字节,每个字节都具有字符的ASCII值。您可以将这些字节收集到一个字节数组中,然后使用新字符串(数组);将它们转换为字符串。或者您可以投射到Char以转换单个字符。

filereader的read返回一个生成的icetagcode。您只需将其投入为int

charReader不仅返回一个read,它是使用char,允许它使用int表示文件末尾。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top