Java RandomAccessFile 指定位置实现文件读取与写入

Java RandomAccessFile 指定位置实现文件读取与写入

RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置的读取和写入内容,这在很多时候都是很方便的。

RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件。BufferedInputStream有一个mark( )方法,你可以用它来设定标记(把结果保存在一个内部变量里),然后再调用reset( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。

实例代码:

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,就是说可以指定位置
 * 的读取和写入内容
 * @author andy
 *
 */
public class RandomAccessFileTest {

 public static void main(String args[]) throws IOException {
 write();
 read();
 }

 public static void write() throws IOException {
 //以读写的方式来访问该文件
 RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "rw");
 raf.writeBytes("Hello World!");
 raf.writeBoolean(true);
 raf.writeInt(30);
 raf.writeDouble(3.56);
 raf.close();
 }

 public static void read() throws IOException {
 RandomAccessFile raf = new RandomAccessFile("D:\\test.txt", "r");
 raf.seek(12);//设置指针的位置
 boolean booleanValue = raf.readBoolean();
 int intValue = raf.readInt();
 double doubleValue = raf.readDouble();
 raf.seek(0);//设置指针的位置为文件的开始部分
 byte[] bytes = new byte[12];
 for (int i=0; i<bytes.length; i++)
  bytes[i] = raf.readByte();//每次读一个字节,并把它赋值给字节bytes[i]
 String stringValue = new String(bytes);
 raf.skipBytes(1);//指针跳过一个字节
 int intValue2 = raf.readInt();
 raf.close();
 System.out.println(booleanValue);
 System.out.println(intValue);
 System.out.println(doubleValue);
 System.out.println(stringValue);
 System.out.println(intValue2);
 }

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • RandomAccessFile简介_动力节点Java学院整理

    RandomAccessFile RandomAccessFile 是随机访问文件(包括读/写)的类.它支持对文件随机访问的读取和写入,即我们可以从指定的位置读取/写入文件数据. 需要注意的是,RandomAccessFile 虽然属于java.io包,但它不是InputStream或者OutputStream的子类:它也不同于FileInputStream和FileOutputStream. FileInputStream 只能对文件进行读操作,而FileOutputStream 只能对文件进

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • Java的字符读写类CharArrayReader和CharArrayWriter使用示例

    CharArrayReader CharArrayReader 是字符数组输入流.它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流.CharArrayReader 是用于读取字符数组,它继承于Reader.操作的数据是以字符为单位! CharArrayReader 函数列表: CharArrayReader(char[] buf) CharArrayReader(char[] buf, int

  • java使用randomaccessfile在文件任意位置写入数据

    复制代码 代码如下: import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile; public class InsertContent {    public static void insert(String fileName, long pos, String inse

  • Java使用RandomAccessFile类对文件进行读写

    1. RandomAccessFile类简介 前面一篇随笔<File类遍历目录及文件>中有说到,File类只能用于表示文件或目录的名称.大小等信息,而不能用于文件内容的访问.而当需要访问文件内容时,就可以用RandomAccessFile类了. RandomAccessFile是Java提供用来访问一些保存数据记录的文件的类,可以进行读取操作,也可以进行写入操作,写入的数据则以byte的形式存储:支持随机访问,也就是可以访问文件的任意位置(通过文件指针实现). 2. 构造函数 RandomAc

  • Java核心编程之文件随机读写类RandomAccessFile详解

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 1.RandomAccessFile RandomAccessFile主要用于文件内容的读写访问 2.访问模式 "r":只读方式. "rw":打开以便读取和访问,如果文件不存在则创建文件. "rws": 除了'rw'功能以外,文件内容或者元数据更新时一同写入. "rwd":除了'rw'功能以外,文件内容更新时一同写入. 3.使用案例 pack

  • 深入分析:用1K内存实现高效I/O的RandomAccessFile类的详解

    主体:目前最流行的J2SDK版本是1.3系列.使用该版本的开发人员需文件随机存取,就得使用RandomAccessFile类.其I/O性能较之其它常用开发语言的同类性能差距甚远,严重影响程序的运行效率.开发人员迫切需要提高效率,下面分析RandomAccessFile等文件类的源代码,找出其中的症结所在,并加以改进优化,创建一个"性/价比"俱佳的随机文件访问类BufferedRandomAccessFile.在改进之前先做一个基本测试:逐字节COPY一个12兆的文件(这里牵涉到读和写)

  • Java RandomAccessFile的用法详解

    RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫

  • Java RandomAccessFile 指定位置实现文件读取与写入

    Java RandomAccessFile 指定位置实现文件读取与写入 RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置的读取和写入内容,这在很多时候都是很方便的. RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和Out

  • Java中IO流文件读取、写入和复制的实例

    //构造文件File类 File f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 String[] fileName=f.list(); //获取目录下的文件 File[] files=f.listFiles(); 1.Java怎么读取文件 package com.yyb.file; import java.io.File; import java.io.FileInputStream; import java.io.In

  • 利用C++如何覆盖或删除指定位置的文件内容

    前言 最近在工作中遇到一个问题,需要覆盖或者删除指定位置的文件内容,发现网上这方面的资料较少,无奈只能自己解决,下面将自己解决的方法分享给大家,方便大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.覆盖指定位置的文件内容 我们经常使用ofstream或者fstream可写文件,使用ifstream可以写文件,但需要设置文件的打开状态为iOS::out.C++中IO流打开模式使用位掩码来表示. IO流打开模式有: 成员常量 app append,追加模式,设置流指针在每一个操作前均指向文

  • Java实现文件读取和写入过程解析

    需求说明 实际操作过程中,从D盘根目录下的ak.txt读取文件写入D盘根目录下的hello.txt文件内 实现思路 写两个方法,一个用于读取目标文件,一个用于写入目标文件--详情见代码注释 代码内容 文件读取和写入练习 package com.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExce

  • Java详解IO流创建读取与写入操作

    目录 概念 io流对应的方法 一.File方法(创建文件) 二.FileInputStream(获取字节方法)输入流 三.FileOutputStream(写入字节方法)输出流 总结 概念 IO流可以初步的理解为数据间的传输,我们将一组数据入:1234567,将他们从hello文件中转入haha文件中,使用程序的方法进行转入的话则需要一个一个的传入,即为一个字节一个字节的传输,我们每次只能传入或读取一个字节,这就是io流的大致流程,io流对任何类型的文件都可以进行读取.如:文本文件,图片,歌曲m

  • android编程之xml文件读取和写入方法

    本文实例讲述了android编程之xml文件读取和写入方法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Eclipse 二.说明: 1.打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置 2.读取xml文件 三.xml文件格式: <?xml version="1.0" encoding="UTF-8" standalone="true"?> -<config> <titl

  • C++ txt 文件读取,并写入结构体中的操作

    如下所示: wang 18 001 li 19 002 zhao 20 003 代码如下: #include <string> #include <iostream> #include <fstream> using namespace std; struct people { string name; int age; string id; }p[20]; int main() { int n = 0; ifstream in( "a.txt" ,

  • Scala之文件读取、写入、控制台操作的方法示例

    Scala文件读取 E盘根目录下scalaIO.txt文件内容如下: 文件读取示例代码: //文件读取 val file=Source.fromFile("E:\\scalaIO.txt") for(line <- file.getLines) { println(line) } file.close 说明1:file=Source.fromFile("E:\scalaIO.txt"),其中Source中的fromFile()方法源自 import scala

  • java对指定目录下文件读写操作介绍

    最近因为项目的国际化的需要,需要对整个项目的100来个插件做国际化,这是一件痛苦的事情,因为纯体力劳动.为了省点工作量,想着能不能写个程序批处理了,减少点工作量,于是就有了下面的代码. 1.读取指定的(.java)文件: 复制代码 代码如下: public static String readFile(String path) throws IOException { File f = new File(path); StringBuffer res = new StringBuffer();

  • 在Python程序中进行文件读取和写入操作的教程

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件). 读文件 要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符: >>> f =

随机推荐