zfu3382548
2011-11-24 21:14 阅读 390
已采纳

writeUTF(String) 写入字符串时,FilePointer是怎么指向的??

为什么使用rf.writeUTF()写入字符串时,当字符串为空时,rf.getFilePointer()返回为18,当String越长,文件指针反而指向的更前。小弟是菜鸟,希望大家多多指点!直接附上代码。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessTest {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    String a = File.separator;
    String s1 = "C:" + a + "test";
    File file = new File(s1);
    Student stu1 = new Student("jjkbwqdsa", 20);
    Student stu2 = new Student("1fdasdasd7", 20);
    Student stu3 = new Student("啵啵啵", 20);
    if (!(file.exists())) {

        file.mkdir();
    }

    RandomAccessFile rf = new RandomAccessFile(new File(file, "1.txt"),
            "rw");
    try {
        rf.writeUTF(stu1.name);
        System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
                //此时文件指针当前位置:10

        rf.writeInt(stu1.age);
        System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
            //此时文件指针当前位置:14

        rf.writeChars(stu2.name);
        System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
        //此时文件指针当前位置:30
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        rf.seek(31);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    rf.writeUTF(stu3.name);
    System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
                //此时文件指针当前位置:52   ????这个怎么由30一下跳到52了,求解!

}

}

class Student {
String name;
int age;
private static final int LEN = 8;

public Student(String name, int age) {
    if (name.length() > LEN) {
        name = name.substring(0, 8);
    } else {
        while (name.length() < LEN)
            name = name + "\u0000";
    }
    this.age = age;
    this.name = name;
}

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    yy1230 yy1230 2011-11-24 22:06

    前面都不说了,
    name3 = "啵啵啵\u0000\u0000\u0000\u0000\u0000"
    这个没问题
    我们把输出分开

    System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --31
    rf.writeUTF("啵啵啵");

    System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --42

    rf.writeUTF("\u0000\u0000\u0000\u0000\u0000");
    System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --54

    现在结果54给你的52是一样的,因为我多输了一次,这个没问题,42到54也没问题.

    lz
    还有一个应该注意就是rf没有close。

    点赞 评论 复制链接分享

相关推荐