您的位置:首页 > 编程语言 > Java开发

RandomAccessFile类

2016-05-02 16:31 183 查看
/*

   * r代表以可读方式打开。

   * rw代表以可写的方式打开。

   */

读取文件

 public static void randomRead(File file, int pointer){

  

  RandomAccessFile randomAccessFile = null;

  try {

   

    randomAccessFile = new RandomAccessFile(file, "r");

   randomAccessFile.seek(pointer);

   byte[]bytes = new byte[1024];

   int hasRead = 0;

   while((hasRead = randomAccessFile.read(bytes)) != -1){

    System.out.println(new String(bytes,0,hasRead));

   }

  } catch (FileNotFoundException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  } catch (IOException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }finally{

   if (randomAccessFile != null) {

    try {

     randomAccessFile.close();

    } catch (IOException e) {

     // TODO Auto-generated catch block

     e.printStackTrace();

    }

   }

  }

 }

 /*

  * 写文件

  */

 public static void randomWrite(File file,String appendContent,long seek){

  RandomAccessFile randomAccessFile = null;

  try {

   randomAccessFile = new RandomAccessFile(file,"rw");

   randomAccessFile.seek(randomAccessFile.length());

   randomAccessFile.write(appendContent.getBytes());

   

  } catch (FileNotFoundException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  } catch (IOException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

 }

 /*

  *

  */

插入文件

 public static void insertByRandomAccessFile(File file, long pointer,String insertContent){

  try {

   File tempFile = File.createTempFile("temp", null);//创建一个新的文件存放。

   tempFile.deleteOnExit();

   

   RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");

   

   FileOutputStream fileOutputStream = new FileOutputStream(tempFile);

   FileInputStream fileInputStream = new FileInputStream(tempFile);

   //用来读写新的文件。

   

   randomAccessFile.seek(pointer);//设置指针偏移量

   

   System.out.println(randomAccessFile.getFilePointer());//打印出第一次指针的位置。

   byte[] bytes = new byte[1024];

   int hasRead = 0;

   while((hasRead = randomAccessFile.read(bytes)) != -1){

    fileOutputStream.write(bytes, 0, hasRead);

   //从第一个偏移量开始,并写入流中,存入到新的文件中。

   }

   randomAccessFile.seek(pointer);//随着while循环,偏移量也会变化,需要重新回到之前的位置。

   

   fileOutputStream.flush();

   

   //从此时写入要插入的数据内容覆盖写入源文件中。

   randomAccessFile.write(insertContent.getBytes());

   

   //而此时偏移量也到了写入内容的后面。

   

    while((hasRead = fileInputStream.read(bytes)) != -1){

     randomAccessFile.write(bytes, 0, hasRead);

     // 这时将之前从指定偏移量之后复制的新文件,并在此覆盖的写入此时文件偏移量开始之处。

    }

    

    randomAccessFile.close();

    fileOutputStream.close();

    fileInputStream.close();

   

  } catch (IOException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

  

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java基础