首页

关于如何实现java在文件任何位置进行读写操作

标签:java,file,File,randomAccessFile,文件读写,文件操作,io流,seek,DataOutput,DataInput,Closeable     发布时间:2015-06-07   

一、API解读

java可以使用RandomAccessFile通过文件指针定位读写位置(默认为文件开始处即seek(0)),RandomAccessFile对象本地方法seek来设置文件开始位置(以字节为单位),然后可以通过本地方法getFilePointer()定位当前支持的位置,如下

 public native void seek(long pos) throws IOException;//设置文件位置@b@ public native long getFilePointer() throws IOException;//读取文件位置

RandomAccessFile类有两个构成方法,如下

/**@b@ *构造读写文件流实例@b@ * param name为目标文件位置@b@ * param model为操作模式,如何“r”、“rw”、“rws”或者"rwd"@b@ *  "r" 以只读方式打开,用法非法操作会抛出IOException@b@ *  "rw" 为读写方式,如不存在,将创建该文件或者@b@ *  "rws" 为读写方式,当文件内容或者元数据更新时,同步到物理文件@b@ *  "rwd"为读写方式,当文件内容更新时,同步到物理文件, I/O 操作数量更少,同步次数频率没有“rws”高,安全性稍低@b@*/@b@public RandomAccessFile(String name, String mode) throws FileNotFoundException;@b@public RandomAccessFile(File file, String mode) throws FileNotFoundException;

二、读写示例

读操作

public void  testRead(){@b@@b@    RandomAccessFile raf=new RandomAccessFile("c:/test1.txt","r");@b@    raf.seek(0);//设置读取开始位置,字节为单位@b@    System.out.println((char)raf.read());//从开始位置向后读取第一个字节,并转换为字符打印@b@    System.out.println((char)raf.read());//从开始位置向后读取第二个字节@b@    raf.close();@b@}

写操作

publc void testWrite(){@b@    RandomAccessFile raf=new RandomAccessFile("c:/test2.txt","rw");@b@    raf.seek(rf.lenght());//从指定文件末尾开始写入@b@    raf.writeByte( 1 );//在文件"test2.txt"末尾写入1@b@    raf.writeUTF("一");//在后面再写入中文"一"@b@    raf.close();@b@}

三、总结

public class RandomAccessFile implements DataOutput, DataInput, Closeable {...}

RandomAccessFile同时实现了DataOutput和DataInput接口,因此它定义用来读写文件,是一种特殊的文件流。

@b@