`
cuijiemin
  • 浏览: 265553 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

随机访问文件类RandomAccessFile

F# 
阅读更多

随机访问类(RandomAccessFile)

输入流FileInputStream和输出流 FileOutputStream,实现的是对磁盘文件的顺序读写,而且读写要分别创建不同对象。相比之下RandomAccessFile类则可对文件实现随机读写操作。

RandomAccessFile对象的文件位置指针遵循下面的规律:

·新建RandomAccessFile对象的文件位置指针位于文件的开头处;

·每次读写操作之后,文件位置的指针都相应后移到读写的字节数;

·可以通过getFilePointer方法来获得文件位置指针的位置,通过seek方法来设置文件指针的位置。

如果某个文件有30个字节,读取数据过程中,从20-30读取,用skip( )//跳过方法,但在读取的过程中,前面的字节都被删除掉了,如果用户有这样的需求,先读取10-20字节,之后再读1-10之间的数,再20-30之间,

java.io
随机访问文件类 RandomAccessFile java.io.RandomAccessFile

所有已实现的接口:

Closeable, DataInput, DataOutput

|0 ||10 ||20 ||30 |

(指示器)

RandomAccessFile常用方法:

skipBytes(long i):从前往后拨弄指示器的位置,就是跳过多少个字节读取数据。

Void seek(long p): 对指示器作决定性的定位,用于从后往前拨弄指示器的位置。对于seek方法,拥有skipBytes( )的功能,但seek( )在使用过程非常影响系统的开销。只有万不得已的情况下使用。

例:seek(0) 指示器移到首部

RandomAccessFile类,即可以充当输入也可充当输出流。可以看作节点流。

构造方法:

RandomAccessFile (”路径+文件名”, String“rw”/”r”)两个参数,

//创建模式:“rw”代表写流,“r”代表读流,

RandomAccessFile常用方法

Void close( )


Long length( )


Void seek( )


##Long getFilePointer( )
获得当前指针位置,默认为0 ,

Int read( )
从文件当前位置读取一个字节

int read (byte[]b)


int read (byte[]b,int off,int len)


Final boolean readBoolean( )
从文件当前位置读取boolean类型的一个字节 boolean在内存占1/8

Final char readChar( )
从文件中读取2个字节。

Final int readInt( )
从文件中读取4个字节。

##Final String readLine( )
从文件中读取一行后转为String。

Void write(byte[]b)
将字节数组B中的数据写到文件中。

Void write(byte[]b,int off,int len)
将 len 个字节从指定字节数组写入到此文件,并从偏移量 off 处开始。

Void write(int b)
将指定的数据写到文件中。

Final void writeBoolean(boolean v)
将boolean类型的值按单字节的形式写到文件中0或1

Final void writeChar(int v)
将char值按2个字节写入到文件中

Final void writeChars(String s)
将字符串按字符方式写入到文件中

Final void writeInt(int v)
按四个字节将 int 写入该文件,先写高字节

例:getFilePointer( )

import java.io.*;

class df

{

public static void main(String args[])throws Exception

{

RandomAccessFile s=new RandomAccessFile("d:/tt.txt","rw");

System.out.println ( s.getFilePointer( ));//0

}

}

例:

import java.io.*;

class RandomAccessFileDemo

{

public static void main(String args[])throws IOException

{

RandomAccessFile f=new RandomAccessFile("myfile","rw");

System.out.println ("File.lelngth:"+(f.length( ))+"B");

System.out.println ("File Pointer Position:"+f.getFilePointer( ));

f.seek(f.length( ));

f.writeBoolean(true);

f.writeBoolean(false);

f.writeChar('a');

f.writeChars("hello!");

System.out.println ("File Length;"+(f.length( ))+"B");

f.seek(0);

System.out.println (f.readBoolean( ));

System.out.println (f.readBoolean( ));

//while(f.getFilePointer( )<f.length( ));??

System.out.println (f.readLine( ));

f.close( );

}}


例:白纸习题

|123456789|123456789|123456789|

1条记录 2条记录 3条记录

//练习随机访问文件类

import java.io.*;

class Student

{

String name="aaaaaaa";

int age=0;

public static final int LEN=8;

public Student (String n,int a)

{

if(n.length( )>LEN)

{

n=n.substring(0,LEN);

}

if(n.length( )<LEN)

{

while(n.length( )<LEN)

{

n+="\u0000";//空格

}

}

this.name=n;

this.age=a;

}

}

class userText1

{

public static void main(String args[ ])throws Exception

{

Student stu1=new Student("Ada",23);

Student stu2=new Student("Shirlenjklcxvfchfhj",24);

Student stu3=new Student("sunfcvvcxvdfdas",25);

RandomAccessFile ra=new RandomAccessFile("student.txt","rw");//写流

ra.write(stu1.name.getBytes( ));//第一的前8个字节,stu1 name属性

//将当前对象的name属性的字符串转为8字节数组

ra.write(stu1.age);//(文件的第九个字节)将int类型的age以单字节的保存在文件中,占有一个字节

ra.write(stu2.name.getBytes( ));//第二对象的前8个字节,stu2 name属性

ra.write(stu2.age);

ra.write(stu3.name.getBytes( ));//第三对象的前8个字节,stu3 name属性

ra.write(stu3.age);

ra.close( );

int len=0;

byte buf[]=new byte[8];//长度为8的字节数组.

RandomAccessFile raf=new RandomAccessFile("student.txt","r");//读流

//------------------------读对象2属性name,age

raf.skipBytes(9);//跳过9个字节

System.out.println (raf.getFilePointer( ));//指针位置

len=raf.read(buf);//##从文件当中读到的字节放在字节数组中最多只能放8个,并返回读取字节的个数。

String str=null;//对象

str=new String(buf,0,len);//0-8//将字节数组buf[]中的全部内容转为String类型。

System.out.println (str+":"+raf.read( ));

//-------------------------读对象1属性name,age

raf.seek(0);//对指示器进行决对定位

System.out.println (raf.getFilePointer( ));//指针位置

len=raf.read(buf);//读取8个字节

str=new String(buf,0,len);

System.out.println (str+":"+raf.read( ));//age取一个字节

//--------------------------读对象3属性name,age

raf.skipBytes(9);

System.out.println (raf.getFilePointer( ));//指针位置

len=raf.read(buf);//读取8个字节

str=new String(buf,0,len);

System.out.println (str+":"+raf.read( ));

System.out.println (raf.getFilePointer( ));//指针位置

raf.close( );

}

}


分享到:
评论

相关推荐

    基于RandomAccessFile文件分类的小程序

    `RandomAccessFile`是Java中的一个核心类,主要用于读写随机访问文件。与传统的`FileInputStream`和`FileOutputStream`不同,`RandomAccessFile`允许程序在文件的任意位置进行读写操作,而不是按照文件的线性顺序。...

    JAVA随机存储流(RandomAccessFile)的应用

    Java中的`RandomAccessFile`是一个非常重要的类,它允许我们以随机访问模式读写文件,这意味着我们可以自由地在文件的任何位置进行读写操作,而不仅仅是顺序地从头到尾处理文件。这个类提供了对文件内容进行高效定位...

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

    1. 随机访问文件的能力:RandomAccessFile可以自由地移动文件指针到文件中的任意位置,这一点与基于流的文件操作不同,后者通常只能顺序地读写数据。 2. 支持多种访问模式:在构造RandomAccessFile实例时,可以指定...

    下标方式随机访问文件数据类

    在编程领域,"下标方式随机访问文件数据类"是一种设计模式,它允许开发者像操作数组一样方便地处理文件中的数据。这种设计思路通常用于创建一个抽象层,封装了文件I/O操作,使得数据访问更加直观和高效。下面将详细...

    RandomAccessFile类的用法.doc

    RandomAccessFile类是Java I/O库中的一个重要组件,它提供了对文件进行随机访问的能力,这意味着你可以直接跳到文件的任意位置进行读写操作,而不仅仅局限于从头到尾的顺序访问。这个类非常适合处理大数据量的文件,...

    使用RandomAccessFile流将一个文本文件读出,并导致写入到另一个文件当中。

    此外,`RandomAccessFile`还支持随机访问,这意味着可以定位到文件中的任意位置进行读写操作。 #### 二、`RandomAccessFile`的构造方法及模式参数 `RandomAccessFile`提供了多个构造方法,其中最常用的是接受两个...

    体会RandomAccessFile

    ### RandomAccessFile 随机访问文件的使用体会 #### 一、RandomAccessFile简介 `RandomAccessFile`是Java中的一个类,位于`java.io`包中,它提供了对文件进行读写的能力,并且可以随机地定位到文件中的任何位置...

    java的RandomAccessFile对文件进行读写操作

    Java中的`RandomAccessFile`类是用于处理文件的高级接口,它允许我们对文件进行随机访问,即在文件的任何位置进行读写操作,而不仅仅是从文件头开始顺序读写。这种能力使得`RandomAccessFile`在处理大文件或者需要...

    RandomAccessFile向文件中写入中文

    `RandomAccessFile`类提供了对文件进行随机访问的能力,它支持读取和写入数据。与`FileInputStream`和`FileOutputStream`等流相比,`RandomAccessFile`提供了一个更灵活的方法来处理文件,因为它允许直接定位到文件...

    多线程下载使用到的是随机文件访问类

    - **C#**:C#的`System.IO.FileStream`类具有类似的功能,可以设置文件指针以实现随机访问。 - **Python**:Python的`io`模块中的`io.FileIO`类支持随机访问。 - **其他语言**:其他编程语言如C++、C、Go等也有...

    多线程随机读取文件

    "RandomAccessFile"是Java中的一个类,它提供了对文件进行随机访问的能力,允许程序在文件的任意位置读写数据,而不仅仅是顺序读取。这种功能在处理大文件、实时数据流或者构建高性能的I/O服务时非常有用。 一、...

    【IT十八掌徐培成】Java基础第16天-01.RandomAccessFile.zip

    `RandomAccessFile`类在`java.io`包下,它提供了对文件进行随机访问的能力,这意味着我们可以跳过文件的某些部分,直接读取或写入指定位置的数据,而无需按顺序逐字节地读取或写入。这与传统的`InputStream`和`...

    RandomAccessFile的用法

    Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以任意位置开始读写,这使得它在处理大文件或需要定位到...

    java 随机读写Java类文件

    2. **RandomAccessFile类**:Java提供了`java.io.RandomAccessFile`类来实现文件的随机读写。它可以定位到文件的任意位置进行读写,非常适合处理大文件或需要频繁跳转的场景。使用`RandomAccessFile`时,需要传入...

    Java RandomAccessFile基本文件操作示例

    Java RandomAccessFile 是 Java 中的一个文件处理类,提供了随机访问文件的能力,支持读写文件的任意位置。下面是 Java RandomAccessFile 基本文件操作示例的知识点总结: 一、 RandomAccessFile 简介 ...

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

    随机访问文件(RandomAccessFile)是Java提供的一个类,它允许程序随机访问文件中的任意位置,进行读写操作。使用RandomAccessFile可以在文件的任意位置插入数据,这对于那些需要在文件中间添加内容而不干扰其他数据...

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

    Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以直接定位到文件的任意位置进行读写操作,这对于处理...

    (完整版)Java程序设计任务驱动式教程-任务二十六-随机进出之道(文件的随机访问).ppt

    随机访问文件的核心类是`RandomAccessFile`。在Java中,通过`RandomAccessFile`可以实现对文件的读写,并且能够在文件的任意位置进行操作。在创建`RandomAccessFile`对象时,需要提供文件路径和访问模式,如"rw"表示...

    RandomAccessFile 解决乱码

    在Java编程中,`RandomAccessFile` 类提供了一种方式来处理文件中的数据,允许程序随机访问文件的任何部分。但在处理中文或其他非ASCII字符时,可能会遇到乱码问题。这是因为不同编码方式对字符的表示方式不同,如果...

Global site tag (gtag.js) - Google Analytics