黑马程序员技术交流社区

标题: io问题 [打印本页]

作者: 李文肖    时间: 2011-10-8 11:15
标题: io问题
import java.io.*;
public class IOTest {
    public static void main(String[] args) throws Exception {
        File f1 = new File("x1.txt");
        File f2 = new File("x2.txt");
        InputStream is = new FileInputStream(f1);
        OutputStream os = new FileOutputStream(f2, true);
        byte[] buf = new byte[1024];
        int len = 0;
        while((len=is.read(buf)) != 0) {
            if(len > 0) {
                os.write(buf,0,len);
            }
            if(f2.length() == f1.length()*3) {
                break;
            }
        }
        os.close();
        is.close();
    }
}
x1.txt的内容如下:
something is wrong.
x2.txt的内容是什么啊?为什么?
每次读指针读到末尾会自动跳到0位置?
作者: 林国锋    时间: 2011-10-8 11:25
x2.txt的内容的内容也是something is wrong,因为1024空间的字节一次就把文件读完了

每次读指针读到末尾不会自动跳到0位置,因为while判断len=-1的时候就退出循环了

作者: 王家虎    时间: 2011-10-8 11:42
本帖最后由 王家虎 于 2011-10-8 11:46 编辑

x2.txt的内容是:something is wrong.
原因是if(len > 0) {
                os.write(buf,0,len);
            }
先执行,执行完之后才执行 if(f2.length() == f1.length()*3) {
                break;
            }
由于前一个if已经执行完了,所以后一个的if随意break,但已经阻止不了了。
指针是按照顺序从前到后依次读取,当读到最后一个字节时如果再往下读就会返回-1,不会回到0的位置。
作者: 姚志华    时间: 2011-10-8 13:06
王家虎 发表于 2011-10-8 11:42
x2.txt的内容是:something is wrong.
原因是if(len > 0) {
                os.write(buf,0,len);

同意这个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2