我知道正确的方法是
BufferedReader br = new BufferedReader(FileReader(file));
但我在Java API中检查了FileReader类的方法,它有一个read()
方法返回字符读取。但这对我不起作用。我正在读取包含这行文本的文件:“我正在读取文件”,并将其打印到屏幕上,但是当我运行程序时,它会为每个字符打印等效的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();
}
}
答案 0 :(得分:5)
这是怎么回事 -
fr.read()返回一个整数而不是一个字符,尽管返回的整数是该字符的等效ASCII代码。
当您对该整数调用String.valueOf()时,将调用String.valueOf(int i)方法,而不是您期望调用的String.valueOf(char c)方法,因此它返回ASCII值作为字符串,而不是字符值作为字符串。
相反,请尝试
lectura = String.valueOf( (char) (fr.read()) );
答案 1 :(得分:2)
这是预期的行为,文本存储为字节,每个字节都有字符的ASCII值。您可以将这些字节收集到一个字节数组中,然后使用新的String(数组);将它们转换为字符串。或者您可以转换为char来转换单个字符。
答案 2 :(得分:1)
FileReader的read
会返回int
。您只需要将其转换为char
。
Reader
的{{1}}不仅仅返回read
的原因是,使用char
可以使用int
来表示结尾-file。