IOストリーム-IOにおけるランダムアクセスストリームとファイルクラスの役割(9)
-
RandomAccessFileは、次の2つの機能を実行できます。
- ファイルへの読み取りおよび書き込み操作を実行します。
- 順番にしか読み取れない他のストリームとは異なり、ファイルの任意の場所にアクセスできます。
一部のクライアントソフトウェアを開発する場合、ソフトウェアの使用回数や使用日など、「ファイルの内容を任意に操作する」ことができるこの強力なクラスがよく使用されます。このクラスは、このタイプのアクセスを通じてアクセスできます。比較および変更ファイルに保存される回数と日付。Javaがクライアントソフトウェアを開発することはめったにないため、このクラスがJava開発で使用されることは比較的まれです。
-
3つのコアメソッド:
-
特定のコードの実装:
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(); } } } }
-
IOにおけるFileクラスの役割
ファイルをデータソースまたはターゲットとして使用する場合、文字列を使用してファイルと場所を指定するだけでなく、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(); } } } }