随机访问类(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`是Java中的一个核心类,主要用于读写随机访问文件。与传统的`FileInputStream`和`FileOutputStream`不同,`RandomAccessFile`允许程序在文件的任意位置进行读写操作,而不是按照文件的线性顺序。...
Java中的`RandomAccessFile`是一个非常重要的类,它允许我们以随机访问模式读写文件,这意味着我们可以自由地在文件的任何位置进行读写操作,而不仅仅是顺序地从头到尾处理文件。这个类提供了对文件内容进行高效定位...
1. 随机访问文件的能力:RandomAccessFile可以自由地移动文件指针到文件中的任意位置,这一点与基于流的文件操作不同,后者通常只能顺序地读写数据。 2. 支持多种访问模式:在构造RandomAccessFile实例时,可以指定...
在编程领域,"下标方式随机访问文件数据类"是一种设计模式,它允许开发者像操作数组一样方便地处理文件中的数据。这种设计思路通常用于创建一个抽象层,封装了文件I/O操作,使得数据访问更加直观和高效。下面将详细...
RandomAccessFile类是Java I/O库中的一个重要组件,它提供了对文件进行随机访问的能力,这意味着你可以直接跳到文件的任意位置进行读写操作,而不仅仅局限于从头到尾的顺序访问。这个类非常适合处理大数据量的文件,...
此外,`RandomAccessFile`还支持随机访问,这意味着可以定位到文件中的任意位置进行读写操作。 #### 二、`RandomAccessFile`的构造方法及模式参数 `RandomAccessFile`提供了多个构造方法,其中最常用的是接受两个...
### RandomAccessFile 随机访问文件的使用体会 #### 一、RandomAccessFile简介 `RandomAccessFile`是Java中的一个类,位于`java.io`包中,它提供了对文件进行读写的能力,并且可以随机地定位到文件中的任何位置...
Java中的`RandomAccessFile`类是用于处理文件的高级接口,它允许我们对文件进行随机访问,即在文件的任何位置进行读写操作,而不仅仅是从文件头开始顺序读写。这种能力使得`RandomAccessFile`在处理大文件或者需要...
`RandomAccessFile`类提供了对文件进行随机访问的能力,它支持读取和写入数据。与`FileInputStream`和`FileOutputStream`等流相比,`RandomAccessFile`提供了一个更灵活的方法来处理文件,因为它允许直接定位到文件...
- **C#**:C#的`System.IO.FileStream`类具有类似的功能,可以设置文件指针以实现随机访问。 - **Python**:Python的`io`模块中的`io.FileIO`类支持随机访问。 - **其他语言**:其他编程语言如C++、C、Go等也有...
"RandomAccessFile"是Java中的一个类,它提供了对文件进行随机访问的能力,允许程序在文件的任意位置读写数据,而不仅仅是顺序读取。这种功能在处理大文件、实时数据流或者构建高性能的I/O服务时非常有用。 一、...
`RandomAccessFile`类在`java.io`包下,它提供了对文件进行随机访问的能力,这意味着我们可以跳过文件的某些部分,直接读取或写入指定位置的数据,而无需按顺序逐字节地读取或写入。这与传统的`InputStream`和`...
Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以任意位置开始读写,这使得它在处理大文件或需要定位到...
2. **RandomAccessFile类**:Java提供了`java.io.RandomAccessFile`类来实现文件的随机读写。它可以定位到文件的任意位置进行读写,非常适合处理大文件或需要频繁跳转的场景。使用`RandomAccessFile`时,需要传入...
Java RandomAccessFile 是 Java 中的一个文件处理类,提供了随机访问文件的能力,支持读写文件的任意位置。下面是 Java RandomAccessFile 基本文件操作示例的知识点总结: 一、 RandomAccessFile 简介 ...
随机访问文件(RandomAccessFile)是Java提供的一个类,它允许程序随机访问文件中的任意位置,进行读写操作。使用RandomAccessFile可以在文件的任意位置插入数据,这对于那些需要在文件中间添加内容而不干扰其他数据...
Java的`RandomAccessFile`类是Java I/O流体系中的一种特殊类型,它允许程序员以随机访问模式读取和写入文件。与传统的输入/输出流不同,`RandomAccessFile`可以直接定位到文件的任意位置进行读写操作,这对于处理...
随机访问文件的核心类是`RandomAccessFile`。在Java中,通过`RandomAccessFile`可以实现对文件的读写,并且能够在文件的任意位置进行操作。在创建`RandomAccessFile`对象时,需要提供文件路径和访问模式,如"rw"表示...
在Java编程中,`RandomAccessFile` 类提供了一种方式来处理文件中的数据,允许程序随机访问文件的任何部分。但在处理中文或其他非ASCII字符时,可能会遇到乱码问题。这是因为不同编码方式对字符的表示方式不同,如果...