如何对输入和输出流使用 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
这意味着我们到达了文件的末尾。
我正在练习文件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
这意味着我们到达了文件的末尾。