我正在用Java练习文件读取器和写入器方法,我编写了此代码,但未按预期工作,请咨询...
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
try {
FileOutputStream obj = new FileOutputStream("D:\\testout.txt");
String s = "Hello world";
byte c[] = s.getBytes();
obj.write(c);
obj.close();
System.out.println("thanks, file created.");
} catch (Exception e) {
System.out.println(e);;
}
FileInputStream reader = new FileInputStream("D:\\testout.txt");
int i;
/*while ((i = reader.read())!= -1) {
System.out.print((char)i);
}
reader.close(); */
for(i = 0; i <= reader.read(); i++) {
System.out.print((char)i);
}
reader.close();
}
}
使用“ while”功能时,它可以工作,但是用“ for”替换时,它显示符号,这是我做错了吗?
答案 0 :(得分:3)
当您使用reader.read()时,它将读取流中的下一个字节,Java文档说:
返回:数据的下一个字节;如果到达文件末尾,则返回-1。
因此,当您执行reader.read()
时,它仅返回int
,它是流的第一个字节的表示。可以是任何东西,具体取决于流的第一个字节。假设您的情况返回8
所以当您这样做
for(i = 0; i <= reader.read(); i++) {
System.out.print((char)i);
}
您正在有效地进行
for(i = 0; i <= 8; i++) {
System.out.print((char)i);
}
您只需要打印0、1、2、3、4、5、6、7和8的字符值。
您不打印流中的字节
另一方面,while
循环执行正确的工作,它不断调用read()方法并读取流的每个字节,直到该方法返回-1
为止,这意味着我们到达文件末尾。