Java提供了一個(gè)可以對(duì)文件隨機(jī)訪問的操作,訪問包括讀和寫操作忍燥。改類名為RandomAccessFile。該類的讀寫是基于指針的操作。
讀寫操作:
寫數(shù)據(jù)
void write(int b)
void write(byte b[])
void writeBytes(byte b[], int off, int len)
向文件中寫數(shù)據(jù)优幸,如果此文件不存在,那么寫數(shù)據(jù)的對(duì)象會(huì)幫你創(chuàng)建文件褪猛。
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" );
//向文件寫入一個(gè)字節(jié)
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" );
//向文件寫入一個(gè)字符串
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" );
/**
* 從指定下標(biāo)開始寫网杆,寫入多少個(gè)長(zhǎng)度
* write(byte b[], int off, int len)
*/
accessFile.write( "hello".getBytes() ,1,3);
accessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
讀數(shù)據(jù)
read()-int 一次讀一個(gè)字節(jié)
read(byte[] b) -按照字節(jié)數(shù)組讀取
package randomAccess;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo2 {
public static void main(String[] args) {
read();
readBytes();
}
/**
* 一次讀取一個(gè)字節(jié)
*/
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("讀取到的實(shí)際字節(jié)長(zhǎng)度 "+len);
System.out.println(new String( bytes ));
raf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
運(yùn)行結(jié)果
a
讀取到的實(shí)際字節(jié)長(zhǎng)度 6
abc中