RandomAccessFile可以实现两个作用:
1.实现对一个文件的读和写的操作
2.可以访问文件的任意位置,不像其他流只能按照先后顺序读取
核心方法:
1.RandomAccessFile(String name,String mode) name用来确定文件; mode取r(读)或rw(可读写),通过mode可以确定流对文件的访问权限
2.seek(long a)用来确定流对象读写文件的位置,a确定读写位置距离文件开头的字节个数
3.getFilePointer()获得流当前读写位置
public class RandomAccessFileDemo {
public static void main(String[] args) {
RandomAccessFile raf=null;
try{
raf=new RandomAccessFile("D:/output3","rw");
int[] arr=new int[]{10,20,30,40,50,60,70,80,90,100};
for (int i=0;i<arr.length;i++){
raf.writeInt(arr[i]);
}
//读指定位置的数据 ,这里的seek里面的数字指的是字节数的下标从0开始 int类型的字节数是4 4刚好是第二个字节的开始readInt返回4个字节数就是20
raf.seek(4);
System.out.println(raf.readInt());
//这里也可以隔行读取
for (int i=0;i<10;i+=2){
raf.seek(i*4);
System.out.print(raf.readInt()+"\t");
}
System.out.println();
//也可以替换数据 用seek输入要替换数据的第一个字节数的下标 添加数据就替换了
raf.seek(8);
raf.writeInt(45);
for (int i=0;i<10;i+=2){
raf.seek(i*4);
System.out.print(raf.readInt()+"\t");
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(raf!=null){
raf.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
File类在io中作用
/**
* 在流对象中只要是以文件作为数据源都可以用File类来指代
*/
public class FileInIoDemo {
public static void main(String[] args) {
BufferedReader br=null;
BufferedWriter bw=null;
try{
br=new BufferedReader(new FileReader(new File("D:/output.txt")));
bw=new BufferedWriter(new FileWriter(new File("D:/output5.txt")));
String temp="";
int i=1;
while((temp=br.readLine())!=null){
bw.write(i+","+temp);
bw.newLine();
i++;
}
bw.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (br!=null){
br.close();
}
if (bw!=null){
bw.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}