Java提供了一个可以对文件随机访问的操作,访问包括读和写操作。改类名为RandomAccessFile。该类的读写是基于指针的操作。
读写操作:
写数据
void write(int b)
void write(byte b[])
void writeBytes(byte b[], int off, int len)
向文件中写数据,如果此文件不存在,那么写数据的对象会帮你创建文件。
package randomAccess;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo {
public static void main(String[] args) {
writeByte();
writeString();
writeStingWithOffset();
}
public static void writeByte() {
try {
/**
* RandomAccessFile(String name, String mode)
* mode :r 只读 rw可读可写
*/
RandomAccessFile accessFile=new RandomAccessFile( "asf1.txt","rw" );
//向文件写入一个字节
accessFile.write( 97 );
accessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeString() {
try {
/**
* RandomAccessFile(String name, String mode)
* mode :r 只读 rw可读可写
*/
RandomAccessFile accessFile=new RandomAccessFile( "asf2.txt","rw" );
//向文件写入一个字符串
accessFile.write( "你喜欢Java不".getBytes());
accessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeStingWithOffset() {
try {
/**
* RandomAccessFile(String name, String mode)
* mode :r 只读 rw可读可写
*/
RandomAccessFile accessFile=new RandomAccessFile( "asf3.txt","rw" );
/**
* 从指定下标开始写,写入多少个长度
* write(byte b[], int off, int len)
*/
accessFile.write( "hello".getBytes() ,1,3);
accessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
读数据
read()-int 一次读一个字节
read(byte[] b) -按照字节数组读取
package randomAccess;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo2 {
public static void main(String[] args) {
read();
readBytes();
}
/**
* 一次读取一个字节
*/
public static void read() {
try {
RandomAccessFile raf=new RandomAccessFile( "a.txt" ,"r");
System.out.println((char)raf.read());
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void readBytes() {
try {
RandomAccessFile raf=new RandomAccessFile( "a.txt" ,"r");
byte[] bytes=new byte[10];
int len=raf.read(bytes);
System.out.println("读取到的实际字节长度 "+len);
System.out.println(new String( bytes ));
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
a
读取到的实际字节长度 6
abc中