如何在输入和输出流中使用for循环?

时间:2019-12-05 12:33:59

标签: java streamreader streamwriter

我正在用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”替换时,它显示符号,这是我做错了吗?

1 个答案:

答案 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为止,这意味着我们到达文件末尾。