Java IO学习笔记(二):RandomAccessFile类

来源:互联网 发布:微盘交易平台源码出售 编辑:程序博客网 时间:2024/06/07 12:04

之前的File类只是针对文件本身进行操作的,而如果相对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随即读取类,可以随机的读取一个文件中指定位置的数据。

因为在文件中,所有得内容都是按照字节存放的,都有固定的保存位置。

 

构造函数:

public RandomAccessFile(File file,String mode)throws FileNotFoundException

实例化此类的时候需要传递File类。告诉程序应该操作的是哪个文件,之后有个模式,文件的打开模式,常用的两种模式:

  • r:读
  • w:写
  • rw:读写,如果使用此模式,如果文件不存在,则会自动创建

先写信息:

复制代码
 1 import java.io.File; 2 import java.io.IOException; 3 import java.io.RandomAccessFile; 4  5 public class Test9 { 6     public static void main(String[] args) throws IOException { 7         File f = new File("d:" + File.separator+"test.txt"); 8         RandomAccessFile raf=new RandomAccessFile(f,"rw");//读写模式,如果该路径不存在会自动创建 9         String name1="jim";10         int age1 =20;11         String name2="Tom";12         int age2=30;13         raf.writeBytes(name1);14         raf.writeInt(age1);15         raf.writeBytes(name2);16         raf.writeInt(age2);17         raf.close();18     }19 }
复制代码

然后读文件:

复制代码
 1 import java.io.File; 2 import java.io.IOException; 3 import java.io.RandomAccessFile; 4  5 public class Test10 { 6     public static void main(String[] args) throws IOException { 7         File f = new File("d:" + File.separator+"test.txt"); 8         RandomAccessFile raf=new RandomAccessFile(f,"r");//以读模式打开 9         raf.skipBytes(7);//跳过第一个人的信息10         byte[] bs=new byte[3];11         for(int i=0;i<bs.length;i++){12             bs[i]=raf.readByte();13         }14         String name2=new String(bs);15         int age2=raf.readInt();16         System.out.println(name2+"  "+age2);17         18         raf.seek(0);//指针回到文件开头,读取第二个人的信息19         for(int i=0;i<bs.length;i++){20             bs[i]=raf.readByte();21         }22         String name1=new String(bs);23         int age1=raf.readInt();24         System.out.println(name1+"  "+age1);25     }26 }
复制代码



另外:可能有的同学输入的是中文,那么使用getBytes()转换,会占3个字节(取决你的本地编码,如果用Eclipse可设置成UTF-8),咦?java里面中文不是占两个字节吗?怎么会变成3个字节呢?其实这不是一个概念,java默认字符编码的是unicode,确实占两个字节,但是在String换转byte[]时用的getBytes()默认用的编码进行转换,那么就会占3个字节,unicode和UTF-8不是一个概念,仔细观察的话会发现getBytes()方法有另外的重载getBytes("……"),例如通过getBytes("gbk"),这是转化的中文就会变成两字节了。

原创粉丝点击