标签:
public class AccessFileDemo { /* getFilePointer() 返回文件记录指针的当前位置,默认从0开始 seek(long pos) 将文件记录指针定位到pos的位置 r 代表以只读方式打开指定文件 rw 以读写方式打开指定文件 rws 读写方式打开,并对内容或元数据都同步写入底层存储设备 rwd 读写方式打开,对文件内容的更新同步更新至底层存储设备 */ public static final File readFile = new File("D:" + File.separator + "intest.txt"); static final long start = 2; public static void main(String[] args) throws Exception{ // read(); // readWithWrite(); insert("对于 IO 流中RandomAccessFile 的测试", 2, "\nlucene是一个优秀的全文检索库"); } //读取 public static void read() throws Exception { @SuppressWarnings("resource") RandomAccessFile file = new RandomAccessFile(readFile, "r"); byte[] readByte = new byte[1024]; int size = 0; while ((size = file.read(readByte)) != -1) { String res = new String(readByte, 0, size, "gbk"); System.out.println(res); } } //追加 public static void readWithWrite() throws Exception{ RandomAccessFile access = new RandomAccessFile(readFile,"rw"); access.seek(access.length()); access.write("我是追加的".getBytes("gbk")); access.close(); System.out.println("结束"); } /** * 实现向指定位置 * 插入数据 * @param fileName 文件名 * @param points 指针位置 * @param insertContent 插入内容 * **/ public static void insert(String fileName, long points, String insertContent) throws Exception { File tmp=File.createTempFile("tmp", null); tmp.deleteOnExit();//当前线程死亡后删除。 RandomAccessFile raf = new RandomAccessFile(fileName, "rw"); //创建一个临时文件夹来保存插入点后的数据 FileOutputStream tmpOut=new FileOutputStream(tmp); FileInputStream tmpIn=new FileInputStream(tmp); raf.seek(points); /**将插入点后的内容读入临时文件夹**/ byte [] buff=new byte[1024]; //用于保存临时读取的字节数 int hasRead=0; //循环读取插入点后的内容 while((hasRead=raf.read(buff))>0){ // 将读取的数据写入临时文件中 tmpOut.write(buff, 0, hasRead); } //插入需要指定添加的数据 raf.seek(points);//返回原来的插入处 //追加需要追加的内容 raf.write(insertContent.getBytes()); //最后追加临时文件中的内容 while((hasRead=tmpIn.read(buff))>0){ raf.write(buff,0,hasRead); } } }
标签:
原文地址:http://www.cnblogs.com/DivineHost/p/5403583.html