randomaccessfile类(关于RandomAccessFile类)

本文目录
- 关于RandomAccessFile类
- java中RandomAccessFile的使用!
- java中为什么用randomaccessfile类写入文件的整数无法显示
- java中randomAccessFile的应用
- 请问java中RandomAccessFile平时用得多吗都用在什么地方
- RandomAccessFile类的seek 和skipBytes 区别
- java中的RandomAccessFiles 是什么
- 谁能给我举个例子RandomAccessFile类
关于RandomAccessFile类
首先你的输出文件:student.txt命名有问题,在windows平台下,这个文件的长度,不是你写入数据的具体长度,平台可能会加上几个字符(你可以把第一个student对象的名字改成“a“实验一下),你的测试没有抛异常,可能是你的测试代码正好能组成一个.txt格式的文件,所以平台没有给你加字节。我觉得最好还是不要写文件的类型名,因为在不同平台下,文件的实现是不同的,Windows下是NTFS,FAT32,Linux下是exts3,对于.txt的文件的解释可能是不同的
主要的错误是程序的逻辑错误,Student s = new Student(); 这句你new了一个新的学生,这个学生对象的num=0,name=null,score=0.0,你从student.txt文件中读出来的数据并没有赋值给s的各个分量,所以输出结果是:编号0姓名null得分0.0
下面是我的测试代码:
-------------------------------------------------------------------
for (long i = 0; i 《 raf.length(); i = raf.getFilePointer()) {
//s.readStudent(raf);
//System.out.println(“编号“ + s.num + “姓名“ + s.name + “得分“ + s.score);
System.out.println(raf.readInt()+“ “+raf.readUTF()+“ “+raf.readDouble()+“\n“);
}
------------------------------------------------------------
如果就这个问题来说,我觉得用ObjectInputStream和ObjectOutputStream比较好理解一些
逻辑错误就是我上面说的,你生成一个student对象时,属性都是空值,你取得到的肯定都是空值了,这就是你的逻辑错误,你的想法是把从文件中读到的值赋值给对象,但是没有赋值。
java中RandomAccessFile的使用!
RandomAccessFile是属于随机读取类,是可以对文件本身的内容直接随机进行操作的,可以在文件的指定位置
的读取和写入内容,这在很多时候都是很方便的。read()是从文件中读取内容,一次只读取一个字节,readByte里面的参数是一个byte数组,一次可以读取这个数组大小的数据。它返回的值就是实际读取了多个字节的数据。
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( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。
RandomAccessFile的绝大多数功能,但不是全部,已经被JDK 1.4的nio的“内存映射文件(memory-mapped files)“给取代了,你该考虑一下是不是用“内存映射文件“来代替RandomAccessFile了。
import java.io.RandomAccessFile;
public class TestRandomAccessFile {
public static void main(String args) throws IOException {
RandomAccessFile rf = new RandomAccessFile(“rtest.dat“, “rw“);
for (int i = 0; i 《 10; i++) {
//写入基本类型double数据
rf.writeDouble(i * 1.414);
}
rf.close();
rf = new RandomAccessFile(“rtest.dat“, “rw“);
//直接将文件指针移到第5个double数据后面
rf.seek(5 * 8);
//覆盖第6个double数据
rf.writeDouble(47.0001);
rf.close();
rf = new RandomAccessFile(“rtest.dat“, “r“);
for (int i = 0; i 《 10; i++) {
System.out.println(“Value “ + i + “: “ + rf.readDouble());
}
rf.close();
}
}
java中randomAccessFile的应用
java.io.RandomAccessFile
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置;
中文API:网页链接
官网API:网页链接
请问java中RandomAccessFile平时用得多吗都用在什么地方
InputStream、OutputStream 实现的是对磁盘文件的顺序读写。而且读写还要分别建立不同的对象。相比之下RandomAccessFile类 可以实现对文件随机读写功能;
新建RandomAccessFile 对象 文件指针位于文件的头位置。每次操作后。指针都会相应移到读写的字节数。
通过getFilePointer可以获得文件指针的位置。seek()可以设置指针位置。。从而对文件操作更加方便。 另外还有许多功能就不一一举例了。。可以看一下API。
RandomAccessFile类的seek 和skipBytes 区别
seek(long a)是定位文件指针在文件中的位置。参数a确定读写位置距离文件开头的字节个数,比如seek(0)就是定位文件指针在开始位置。是绝对定位。
skipBytes()是指在文件中跳过给定数量的字节。是相对定位。
对于seek方法,拥有skipBytes( )的功能,但seek( )在使用过程非常影响系统的开销。只有万不得已的情况下使用。
java中的RandomAccessFiles 是什么
随机读取文件流的类
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
谁能给我举个例子RandomAccessFile类
RandomAccessFile类用处还是很大的,读写文件非常方便,指针又可以任意移动,这里有个写入和读取的例子供你参考,你可以直接拷贝去编译和运行,慢慢体会一下:
import java.io.IOException;
import java.io.File;
import java.io.RandomAccessFile;
class RandomFileTest
{
public static void main(String args) throws Exception
{
Student s1=new Student(1, “zhangsan“, 90.5);
Student s2=new Student(2, “lisi“, 98.5);
Student s3=new Student(3, “wangwu“, 96.5);
File userDir=new File(System.getProperties().getProperty(“user.dir“));
File tempFile=File.createTempFile(“~student“, “.tmp“, userDir);
tempFile.deleteOnExit();
RandomAccessFile raf=new RandomAccessFile(tempFile, “rw“);
s1.write(raf);
s2.write(raf);
s3.write(raf);
raf.seek(0);
Student s=new Student();
for(long i=0;i《raf.length();i=raf.getFilePointer())
{
s.read(raf);
System.out.println(“[lenth:“+raf.length()+“,i=“+i+“] “ + s);
}
raf.close();
Thread.sleep(5000);
}
}
class Student
{
int num;
String name;
double score;
public Student()
{
}
public Student(int num, String name, double score)
{
this.num=num;
this.name=name;
this.score=score;
}
public void write(RandomAccessFile raf) throws IOException
{
raf.writeInt(num);
raf.writeUTF(name);
raf.writeDouble(score);
}
public void read(RandomAccessFile raf) throws IOException
{
num=raf.readInt();
name=raf.readUTF();
score=raf.readDouble();
}
public String toString()
{
return “num=“+num+“,name=“+name+“,score=“+score;
}
}

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00









