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

问题描述 投票:0回答:1

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

java streamreader streamwriter
1个回答
2
投票

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

returns:数据的下一个字节,如果到达文件末尾,则为-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的char值。

您不打印流中的字节

while循环执行正确的工作,它继续调用read()方法并读取流的每个字节,直到该方法返回-1,这意味着我们到达了文件。

© www.soinside.com 2019 - 2024. All rights reserved.