当前位置: 代码迷 >> J2SE >> 对于java.io.RandomAccessFile
  详细解决方案

对于java.io.RandomAccessFile

热度:613   发布时间:2016-04-24 12:55:44.0
关于java.io.RandomAccessFile
[size=11px][size=18px]先上代码,可能长了[/size][/size]
Java code
package javabook;import java.io.*;import java.util.*;//首先设计一个学生数据的类class Student{    private String name;    private int score;        public Student(){        setName("noname");    }        public Student(String name,int score){        setName(name);        this.score=score;    }        public void setName(String name){        StringBuilder builder = null;        if(name!=null)            builder = new StringBuilder(name);        else             builder = new StringBuilder(15);//StringBuilder(int capacity)                              //构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。                builder.setLength(15);//最长15个字符 1个字符占用2个字节  设置置字符序列的长度         this.name = builder.toString();    }        public void setScore(int score){        this.score = score;    }        public String getName(){        return name;    }        public int getScore(){        return score;    }                     public static int size(){        return 34;    }}public class RandomAccess {    private static String readName(RandomAccessFile randomAccessfile)throws IOException{        char[] name = new char[15];        for(int i = 0;i < name.length;i++)            name[i]=randomAccessfile.readChar();                /*将空字符取代为空格符并返回         *replace(char oldChar, char newChar) 返回一个新的字符串,         *它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。         *String(byte[] bytes)  String的构造方面         */        return new String(name).replace('\0', ' ');      }        public static void main(String[] args){        Student[] students={            new Student("Justi",90),            new Student("momor",95),            new Student("Bush",88),            new Student("catepillar",84)        };        try{            File file = new File("student.data");   //如何没写"/",就是存在默认包里                        /*System.out.println(file.getAbsolutePath());             *建立RandomAccessFile实例并以读写模式打开文件 "rw"表示读写模式  其中"r"表示读出 "w"表写入 可以用这3个其中1个             *RandomAccessFile(File file, String mode)   RandomAccessFile(String name, String mode)              */             RandomAccessFile randomAccessFile =                     new RandomAccessFile(file,"rw");                        for(int i = 0;i<students.length;i++){                //使用对应的write方法写入数据                randomAccessFile.writeChars(students[i].getName());                randomAccessFile.writeInt(students[i].getScore());                            }                                    Scanner scanner = new Scanner(System.in);                        System.out.print("读取第几个数据?");                        int num = scanner.nextInt();                        //使用seek()方法操作存取位置            randomAccessFile.seek((num-1)*Student.size());            //randomAccessFile.seek(0);            Student student = new Student();                        //使用对应的read方法读出数据            student.setName(readName(randomAccessFile));            student.setScore(randomAccessFile.readInt());                        System.out.println("姓名:"+student.getName());            System.out.println("分数"+student.getScore());                        //设置关闭文件            randomAccessFile.close();                    }catch(ArrayIndexOutOfBoundsException e){            e.printStackTrace();        }        catch(FileNotFoundException e){            e.printStackTrace();        }        catch(IOException e){            e.printStackTrace();        }            }}


代码虽长,问题只有一个
randomAccessFile.seek((num-1)*Student.size());
文件指针为什么要指向是指向34
  public static int size(){
  return 34;
  }
书上说30+4
就是15个字符是30个字节
为什么加4,想知道原理
  相关解决方案