import java.io.IOException; import java.io.RandomAccessFile; public class Linkin { public static void main(String[] args) throws IOException { RandomAccessFile raf = null; try { raf = new RandomAccessFile("src/Linkin.java", "r"); // 获取RandomAccessFile对象文件指针的位置,初始位置是0 System.out.println("RandomAccessFile的文件指针的初始位置:" + raf.getFilePointer()); // 移动raf的文件记录指针的位置 raf.seek(300); byte[] bbuf = new byte[1024]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水”过程 while ((hasRead = raf.read(bbuf)) > 0) { // 取出“竹筒”中水滴(字节),将字节数组转换成字符串输入! System.out.print(new String(bbuf, 0, hasRead)); } } catch (Exception ioe) { ioe.printStackTrace(); } finally { if (raf != null) { raf.close(); } } } }
import java.io.*; public class AppendContent { public static void main(String[] args) { try( //以读、写方式打开一个RandomAccessFile对象 RandomAccessFile raf = new RandomAccessFile("out.txt" , "rw")) { //将记录指针移动到out.txt文件的最后 raf.seek(raf.length()); raf.write("追加的内容!\r\n".getBytes()); } catch (IOException ex) { ex.printStackTrace(); } } }
import java.io.*; public class InsertContent { public static void insert(String fileName , long pos , String insertContent) throws IOException { File tmp = File.createTempFile("tmp" , null); tmp.deleteOnExit(); try( RandomAccessFile raf = new RandomAccessFile(fileName , "rw"); // 创建一个临时文件来保存插入点后的数据 FileOutputStream tmpOut = new FileOutputStream(tmp); FileInputStream tmpIn = new FileInputStream(tmp)) { raf.seek(pos); // ------下面代码将插入点后的内容读入临时文件中保存------ byte[] bbuf = new byte[64]; // 用于保存实际读取的字节数 int hasRead = 0; // 使用循环方式读取插入点后的数据 while ((hasRead = raf.read(bbuf)) > 0 ) { // 将读取的数据写入临时文件 tmpOut.write(bbuf , 0 , hasRead); } // ----------下面代码插入内容---------- // 把文件记录指针重新定位到pos位置 raf.seek(pos); // 追加需要插入的内容 raf.write(insertContent.getBytes()); // 追加临时文件中的内容 while ((hasRead = tmpIn.read(bbuf)) > 0 ) { raf.write(bbuf , 0 , hasRead); } } } public static void main(String[] args) throws IOException { insert("InsertContent.java" , 45 , "插入的内容\r\n"); } }
原文地址:http://blog.csdn.net/u011794238/article/details/42267879