randomaccessfile类(关于RandomAccessFile类)

:暂无数据 2026-06-21 23:30:01 :0

randomaccessfile类(关于RandomAccessFile类)

大家好,randomaccessfile类相信很多的网友都不是很明白,包括关于RandomAccessFile类也是一样,不过没有关系,接下来就来为大家分享关于randomaccessfile类和关于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.IOException;
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;
}
}

OK,关于randomaccessfile类和关于RandomAccessFile类的内容到此结束了,希望对大家有所帮助。

randomaccessfile类(关于RandomAccessFile类)

本文编辑:admin

更多文章:


汉字机内码查询表(1个汉字的机内码是几位谢谢)

汉字机内码查询表(1个汉字的机内码是几位谢谢)

大家好,关于汉字机内码查询表很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于1个汉字的机内码是几位谢谢的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:20

promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

手机云备份是什么意思?手机上的云备份有什么用 怎么用呢

手机云备份是什么意思?手机上的云备份有什么用 怎么用呢

各位老铁们,大家好,今天由我来为大家分享云备份,以及手机云备份是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年10月11日 02:40

java遍历map的key(java Map 怎么遍历)

java遍历map的key(java Map 怎么遍历)

大家好,java遍历map的key相信很多的网友都不是很明白,包括java Map 怎么遍历也是一样,不过没有关系,接下来就来为大家分享关于java遍历map的key和java Map 怎么遍历的一些知识点,大家可以关注收藏,免得下次来找不

2026年10月11日 02:20

微信xlsx文件怎么打开(苹果手机微信打开excel)

微信xlsx文件怎么打开(苹果手机微信打开excel)

大家好,关于微信xlsx文件怎么打开很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于苹果手机微信打开excel的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 01:10

最近更新

promote翻译(英语翻译倡导怎么说)
2026-10-11 06:30:03 浏览:0
热门文章

标签列表