RandomAccessFile类&读写

RandomAccessFile是Java中用于高效读写文件的类,支持按字节或基本数据类型进行操作。可以写入单个字节、整数、长整数、双精度浮点数等,并能读取相应数据。此外,该类还提供了以UTF编码读写字符串的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RandomAccessFile类
用于读写文件内容的类.
硬盘上的文件是byte by byte的

void write(int d):写一个字节,写int值的低8位.

写基本数据类型
void writeInt(int d):写四个字节,将int值d写出.
void writeLong(long l):写八个字节,写long值
void writeDouble(double d):写一个double值
void write…
int read():读一个字节.返回一个int值,只有低8位有效

读基本数据类型
int readInt():读取一个int值,连续读4个字节,转化为int值
long readLong()
double readDouble()

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

/**
 * 使用RandomAccessFile读写文件
 * 读写操作后,要将其关闭
 * @author Administrator
 *
 */


public class RandomAccessFileDemo {

	public static void main(String[] args) throws IOException {
		/**
		 * 向文件中写入内容
		 */
		File file=new File("out.dat");
		//文件不存在就创建
		if(!file.exists()){file.createNewFile();
			}
		//创建用于读写文件内容的RandomAccessFile
		//构造方法参数(file,string)
		//"r"只读 "rw"读写
		RandomAccessFile raf=new RandomAccessFile(file,"rw");
		/**
		 * write(int d)向文件中写入1个字节,这个字节是int的低8位
		 */
		//输出指针位置,默认是在文件开始,位置0代表第一个字节.
		System.out.println(raf.getFilePointer());
		//写入字符'A'
		
		raf.write('A');
		System.out.println(raf.getFilePointer());
		raf.write('B');
		int max=Integer.MAX_VALUE;
		raf.write(max>>>24);//写入int值高8位
		raf.write(max>>>16);
		raf.write(max>>>8);
		raf.write(max);
		System.out.println(raf.getFilePointer());
		
		/**
		 * RandomAccessFile的读写操作是基于指针的
		 * 只会读写读取指针指向的这个字节
		 * 
		 * 移动指针的方法 seek(int p)
		 * 参数p:需要将游标移动到的位置
		 */
		raf.seek(0);
		char a=(char)raf.read();
		System.out.println(a); //A
		/**
		 * 现在指针指向第二个字节
		 * 这个位置原来的内容是字符'B' 在这里写了一个字节
		 * 这个字节的内容是字符'C',这时候'B'就被替换掉了
		 */
		raf.write('C');
		
		raf.close();//关闭,释放操作文件的资源.
	}

}
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo2 {

	public static void main(String[] args) throws IOException {
		File file=new File("out.dat");
		RandomAccessFile raf=new RandomAccessFile(file,"rw");
		/**
		 * read==>00000000 00000000 00000000 01010101
		 * a      ==>00000000 01010101
		 */
		char a=(char)raf.read();
		char b=(char)raf.read();
		System.out.println(a);
		System.out.println(b);
		/**
		 * 读取int值
		 */
		int data=raf.read();
		int num=0;
		num=num|(data<<24);
		data=raf.read();
		num+=data<<16;
		data=raf.read();
		num+=data<<8;
		data=raf.read();
		num+=data;
		System.out.println(num);
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo3 {

	public static void main(String[] args) throws IOException {
		File file=new File("o.dat");
		if(!file.exists()){
			file.createNewFile();
		}
		RandomAccessFile raf=new RandomAccessFile(file,"rw");
		int max=Integer.MAX_VALUE;
		raf.writeInt(max);
		System.out.println(raf.getFilePointer());//4
		raf.seek(0);
		int num=raf.readInt();
		System.out.println(num);
	
		}

}

读写字符串
以UTF编码读写字符串
void writeUTF(String str):将字符串以UTF转化为字节后写出
String readUTF():将字节读取后按照UTF编码转化字符串

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

public class RandomAccessFileDemo4 {

	public static void main(String[] args) throws IOException {
		File file=new File("out.yml");
		if(!file.exists()){
			file.createNewFile();
		}
		RandomAccessFile raf=new RandomAccessFile(file,"rw");
		String str="不知道写什么,随便来点吧:";
		//将字符串以UTF-8编码写到文件中
		raf.writeUTF(str);
		raf.seek(0);
		//以UTF-8编码从文件中将字符串读取出来
		str=raf.readUTF();
		System.out.println(str);
		raf.close();

	}

}
你可以使用`RandomAccessFile`和`ByteBuffer`来实现文件的读写操作。下面是一个示例代码: ```java import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileReadWriteExample { public static void main(String[] args) { try { // 打开一个 RandomAccessFile 对象,以读写模式打开文件 RandomAccessFile file = new RandomAccessFile(&quot;example.txt&quot;, &quot;rw&quot;); FileChannel channel = file.getChannel(); // 创建一个 ByteBuffer,设置容量为 1024 字节 ByteBuffer buffer = ByteBuffer.allocate(1024); // 从文件中读取数据到 ByteBuffer int bytesRead = channel.read(buffer); while (bytesRead != -1) { buffer.flip(); // 切换为读模式 while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); // 读取字节并输出 } buffer.clear(); // 清空 ByteBuffer bytesRead = channel.read(buffer); // 继续从文件中读取数据 } // 向文件中写入数据 String data = &quot;Hello, World!&quot;; buffer.clear(); buffer.put(data.getBytes()); buffer.flip(); // 切换为写模式 channel.write(buffer); // 关闭文件流 file.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例中,首先创建了一个`RandomAccessFile`对象,并通过`getChannel()`方法获取了`FileChannel`对象。然后,创建了一个`ByteBuffer`对象,并设置了容量为1024字节。接下来,使用`channel.read(buffer)`方法从文件中读取数据到`ByteBuffer`,并通过`buffer.flip()`方法切换为读模式。然后,使用`buffer.get()`方法逐个读取字节并输出。当`buffer`中没有剩余字节时,使用`buffer.clear()`方法清空`ByteBuffer`。重复执行以上步骤,直到读取到文件末尾。最后,使用`buffer.put(data.getBytes())`方法将数据写入`ByteBuffer`,并通过`buffer.flip()`方法切换为写模式。最后,使用`channel.write(buffer)`方法将数据写入文件中。最后,记得关闭文件流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值