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

How do I use a for loop with input and output streams?

我正在练习文件reader和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" 替换它时它显示符号,我做错了什么??

当您使用 reader.read() 时,它会读取流中的下一个字节,Java 文档说:

returns: the next byte of data, or -1 if the end of the file is reached.

所以当你做 reader.read() 时,它只是 returns 一个 int,这是流的第一个字节的表示。它可以是任何内容,具体取决于流的第一个字节。假设你的情况是 returns 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() 方法并读取流的每个字节,直到方法 returns -1 这意味着我们到达了文件的末尾。