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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张卯 于 2012-4-13 18:44 编辑

在“黑马程序员_毕向东_Java基础视频教程第21天-03-IO流(RandomAccessFile)”老毕最后提到可以把姓名设置成16个字节,年龄4个字节,每个人的信息一共20字节,自己想了半天没有思路,请教各位大牛,具体该如何实现?最好有代码,多谢了!

参考代码如下:

  1. import java.io.*;

  2. class RandomAccessFileDemo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 writeFile();
  7.         }

  8.         public static void writeFile() throws IOException
  9.         {
  10.                 RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");

  11.                 raf.write("李四".getBytes());
  12.                 raf.writeInt(97);
  13.                 raf.write("王五".getBytes());
  14.                 raf.writeInt(99);

  15.                 raf.close();
  16.         }
  17. }
复制代码
“ran.txt”内容如下:
李四   a王五   c

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
是不是定义一个数组呢?数组的长度为20,然后可以通过seek方法随意的取出自己想要的名字和姓名
我是这么想的  .
RandomAccessFile raf1 = new RandomAccessFile("d:\\ran.txt","r");
                 byte buf[] = new byte[20];
                 raf1.read(buf);
                 raf1.skipBytes(8);
                 String name = new String(buf);
                 int age = raf1.readInt();
                 System.out.println("name::" + name);
                 System.out.println("age::" + age);
                 raf1.close();
回复 使用道具 举报
金兴 发表于 2012-4-10 22:49
是不是定义一个数组呢?数组的长度为20,然后可以通过seek方法随意的取出自己想要的名字和姓名
我是这么想的 ...

兄弟你的代码应该是读取吧,如果我没理解错的话,老毕的意思应该是说在写入数据时就将姓名和年龄按每20个字节一段一段地写入文本文件。
回复 使用道具 举报
public class RandomAccessFileDemo {
    public static void main(String[] args) throws IOException{
            writeFile();
    }
    public static void writeFile() throws IOException{
       RandomAccessFile raf = new RandomAccessFile("D:\\eclipse\\ceshi\\src\\heima\\ran.txt","rw");
     
       //想要指定名字的长度为16个字节,那么我们需要自定义一个方法来获取name的16个字节的数组
    raf.write(getBytes("李四"));
       raf.writeInt(97);//默认为4个字节

    raf.write(getBytes("王五"));
       raf.writeInt(99);

       raf.close();
       //输入两个姓名年龄后对应的文本大小为40个字节...
    }
    public static byte[] getBytes(String str) {
            byte[] byts1 = new byte[16];//定义一个16个字节长度的数组byts1
            byte[] byts2 = str.getBytes();//获取name对应的数组 byts2
            for(int x=0;x<byts1.length;x++){
                            //遍历16字节长度的数组,并将对应的byts2个角标对应的值的值赋给byts1的对应角标元素
                    if(x<byts2.length)
                            byts1[x]=byts2[x];
                    //如果byts2的长度小于16,那么就给byts1后面没有赋值的元素赋值为' '
                    else{
                            byts1[x]=' ';
                    }
            }
            return byts1;//返回16个字节长度的数组byts1
    }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 很给力!

查看全部评分

回复 使用道具 举报
薛飞飞 发表于 2012-4-10 23:57
public class RandomAccessFileDemo {
    public static void main(String[] args) throws IOException{
  ...

这个不错,赞一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马