A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴亨 黑马帝   /  2011-12-16 14:47  /  2522 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴亨 于 2011-12-17 12:57 编辑

import java.io.*;
public class TestFile {


        public static void main(String[] args) throws Exception
                 {
         Employee s1 = new Employee("zhangsan",21);
         Employee s2 = new Employee("lisi",23);
         Employee s3 = new Employee("wangwu",24);
         RandomAccessFile f = new RandomAccessFile("abc.txt","rw");
           f.write(s1.name.getBytes());
           f.writeInt(s1.age);
           f.write(s2.name.getBytes());
           f.writeInt(s2.age);
           f.write(s3.name.getBytes());
           f.writeInt(s3.age);
           f.close();
            final int LEN = 8;
           byte[] Buffer= new byte[8];
           f.skipBytes(LEN+4);
           f.read(Buffer);
           System.out.println(new String(Buffer)+","+f.read());
           f.seek(0);
           Buffer = null;
           f.read(Buffer);
           System.out.println(new String(Buffer)+","+f.read());
           f.skipBytes(LEN+4);
           Buffer = null;
           f.read(Buffer);
           System.out.println(new String(Buffer)+","+f.read());
           f.close();
        }
}

class Employee {
        public  String name = "unknown";
    public  int age = 0;
    public         static final int LEN = 8;
        public Employee(String name,int age) {

                if(name.length()<LEN)
                        name += "\u0000";
                else
                        name = name.substring(0,LEN);
                this.name = name;
                this.age = age;
        }
}
编译没问题,但执行却有问题。

QQ截图20111126144720.png (6.29 KB, 下载次数: 47)

QQ截图20111126144720.png

4 个回复

倒序浏览
楼主的f.close();语句已经将RandomAccessFile对象关闭掉,
所以会报Stream Closed的异常
回复 使用道具 举报
   第一个    f.close(); 要删除掉,否则就f就没法继续访问了。
还有,Buffer = null,也要删除掉,如果不删除, Buffer就没有相对应的存储空间了, 因为被赋值为空了。
还有调用f.read(Buffer); 之后 再调用f.skipBytes(LEN+4); 也不对,  因为read函数已经把指针后移8位了,  之后再skip4位就行了, 不用skip12位。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
吴亨 黑马帝 2011-12-17 12:57:25
板凳
songxingchao 发表于 2011-12-16 17:35
第一个    f.close(); 要删除掉,否则就f就没法继续访问了。
还有,Buffer = null,也要删除掉,如果不删 ...

兄弟,厉害。
回复 使用道具 举报
吴亨 黑马帝 2011-12-17 12:57:45
报纸
谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马