IO流-随机访问流、File类在IO的作用(九)
-
RandomAccessFile可以实现两个作用:
- 实现对一个文件做读和写的操作。
- 可以访问文件的任意位置,不像其他流只能按照先后顺序读取。
在开发某些客户端软件时,经常用到这个功能强大的可以"任意操作文件内容"的类,比如:软件的使用次数和使用日期,可以通过本类访问文件中保存次数和日期的地方进行比对和修改。java很少开发客户端软件,所以在java开发中这个类用的相对比较少。
-
核心的三个方法:
-
具体的代码实现:
import java.io.RandomAccessFile; public class RandomAccessFileDemo { public static void main(String[] args) { RandomAccessFile raf=null; try { raf=new RandomAccessFile("d:/sxt7.txt","rw");//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]); } raf.seek(4);//比如:10:0 1 2 3 (4个字节) 20:4 5 6 7 (4个字节),而seek(4),就是指针从第4个字节开始读取,从第四个字节开始返回多少个 System.out.println(raf.readInt());//readInt()是读取4个字节,也就是从刚才的第四个字节开始,读取四个字节,也就是输出20 //隔一个读一个数据 for (int i=0;i<10;i+=2){ raf.seek(i*4);//隔四个字节读四个字节 System.out.print(raf.readInt()+"\t"); } System.out.println(); //在第8个字节位置插入一个新的数据45,替换之前的数据30 raf.seek(8); raf.writeInt(45);//从第八个字节开始替换,替换四个字节,替换的数值为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类指定。
import java.io.*; public class FileInIODemo { public static void main(String[] args) { BufferedReader br=null; BufferedWriter bw=null; try { //我们之前都是用"路径"字符串放在了FileReader当中,去指定位置,现在我们通过File对象来表达了 br=new BufferedReader(new FileReader(new File("d:/sxt.txt"))); bw=new BufferedWriter(new FileWriter(new File("d:/sxt8.txt"))); String temp=""; int i=1; while ((temp=br.readLine())!=null){ bw.write(i+","+temp); bw.newLine(); i++; } }catch (Exception e){ e.printStackTrace(); }finally { try { if (br!=null){ br.close(); } if (bw!=null){ bw.close(); } }catch (Exception e){ e.printStackTrace(); } } } }