package javaxxx;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* long getFilePointer()返回文件记录指针的的当前位置
* void seek(long pos):将文件记录指针定位到pos位置
* @author 97699
*RandomAccessFile既可以读文件,也可以写文件
*两个构造器,一个使用Stirng参数指定文件名,一个使用File参数指定文件本身
*需要指定mode参数,指定RandomAccessFile的访问模式
*r:只读
*rw:读写,如果不存在,创建文件
*rws:读取写入,相对于rw,要求对文件内容或元数据的每个更新同步写入底层存储设备
*rwd:读取写入,相对于rw,要求对文件内容的每个更新同步写入到底层存储设备
*/
public class RandomAccessFileTest {
public static void main(String[] args) {
RandomAccessFile raf=null;
try {
//只读方式打开RandomAccessFile对象
raf=new RandomAccessFile("D:\\eclipse-workspace\\java\\src\\javaxxx\\SQL_DML.txt","r");
//获取RandomAccessFile对象文件指针的位置,初始值为0
System.out.println("RandomAccessFile文件指针的初始位置:"+raf.getFilePointer());
//移动raf文件记录指针的位置
raf.seek(50);
byte[] bbuf=new byte[1024];
//保存读取的字节数
int hasRead=0;
while((hasRead=raf.read(bbuf))>0) {
//将字节数组转换成字符串输入
System.out.println(new String(bbuf,0,hasRead));
}
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally {
if(raf!=null) {
try {
raf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package javaxxx;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* RandomAccessFile追加内容
* @author 97699
*
*/
public class AppendContent {
public static void main(String[] args) {
RandomAccessFile raf=null;
try {
raf=new RandomAccessFile("out.txt","rw");
//将文件指针指向文件最后
raf.seek(raf.length());
raf.write("追加内容\r\n".getBytes());
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally {
if(raf!=null) {
try {
raf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package javaxxx;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* RandomAccessFile向指定文件,指定位置插入内容
* @author 97699
* 先使用File的createTempFile创建一个临时文件将插入节点以后的文件内容保存到临时文件中
*程序重新定位到插入点,将要插入的内容保存到节点后
*/
public class InsertContent {
public static void insert(String fileName,long pos,String insertContent) throws IOException {
RandomAccessFile raf=null;
//创建临时文件保存插入点后数据
File tmp=File.createTempFile("tmp", null);
FileOutputStream tmpout=null;
FileInputStream tmpin=null;
tmp.deleteOnExit();//jvm退出的时候删除临时文件
try {
raf=new RandomAccessFile(fileName,"rw");
tmpout=new FileOutputStream(tmp);
tmpin=new FileInputStream(tmp);
raf.seek(pos);
//将插入点后的内容读入临时文件中保存
byte[] bbuf=new byte[64];
int hasRead=0;
while((hasRead=raf.read(bbuf))>0) {
tmpout.write(bbuf, 0, hasRead);
}
//把文件记录指针定位到pos
raf.seek(pos);
raf.write(insertContent.getBytes());
while((hasRead=tmpin.read(bbuf))>0) {
raf.write(bbuf, 0, hasRead);
}
}finally {
raf.close();
}
}
public static void main(String[] args) throws IOException {
insert("out.txt",45,"这次要插入的内容");
}
}