Java的RandomAccessFile對文件內容進行讀寫


 RandomAccessFileJava提供的對文件內容的訪問,她既可以讀文件,也可以寫文件,並且RandomAccessFile支持隨機訪問文件,也就是說他可以指定位置進行訪問。

  我們知道Java的文件模型,文件硬盤上的文件是byte byte byte的字節進行存儲的,是數據的集合。下面就是用這個類的步驟。

(1)打開指定的文件,有兩種模式rw(讀寫r(只讀),創建對象,並且指定file和模式,例如:

      RandomAccessFile ac=new RandomAccessFile(file,”rw”);

 因為它支持隨機訪問文件,所以他引入了指針,可以通過指針來寫入寫出在指定的位置。文件指針,打開文件時指針在開頭pointer=0

(2)RandomAccessFile的往文件中寫的方法(還有其他的寫方法)

  Ac.write(int)----->只能寫一個字節(后八位),同時文件指針也會移動,指向下一個位置。

(3)RandomAccessFile讀的方法(還有其他的讀方法)

  int b=ac.read()--->讀一個字節

(4)文件讀寫完畢后必須要把他關閉,調用close()的方法。下面就是例子:

 

//創建相對路徑的文件,就是在這個項目中創建一個文件夾
        File file=new File("random");
        if(!file.exists()) {
            file.mkdir();
        }
        File fileName=new File(file,"javaio.txt");
        if(!fileName.exists()) {
            fileName.createNewFile();//創建文件
        }
        //創建一個RandomAccessFile的對象,並指定模式rw,能讀能寫,
        //注意:必須是文件,不能是路徑
        RandomAccessFile raf=new RandomAccessFile(fileName,"rw");
        //獲取此時的文件指針的位置,起始位置為0
        System.out.println(raf.getFilePointer());
        //向文件中寫入字符A,字符類型有兩個字節,但她寫入的是后八位的字節
        //字符A正好可以用后八位的字節表示出來
        raf.write('A');
        //字符的位置會自動向后移動,文件指針會向后自動移動
        System.out.println("輸入一個字符之后,文件指針的位置"+raf.getFilePointer());
        raf.write('B');
        
        
        //每次write只能寫入一個字節,如果要把i寫進去,就需要寫四次
        int i=0x7fffffff;
        raf.write(i>>>24 & 0xff);//寫入高八位的
        raf.write(i>>>16 & 0xff);
        raf.write(i>>>8   & 0xff);
        raf.write(i);//寫入低八位
        System.out.println("寫入整數的時候文件指針的位置是"+raf.getFilePointer());
        
        
        /**
         * writeInt()的內置方法
         *  public final void writeInt(int v) throws IOException {
        write((v >>> 24) & 0xFF);
        write((v >>> 16) & 0xFF);
        write((v >>>  8) & 0xFF);
        write((v >>>  0) & 0xFF);
        //written += 4;
    }
         */
        
        //也可以直接寫入int整數
        raf.writeInt(i);
        
        //寫入一個漢字,漢字為兩個字節
        String str="歡迎學習java";
        byte[] b=str.getBytes("gbk");
        raf.write(b);
        System.out.println("此時的長度為"+raf.length());
        
        
        //讀文件必須將文件指針放在開頭位置
        raf.seek(0);
        byte[] buf=new byte[(int)raf.length()];
        raf.read(buf);//將內容寫入buf字節數組中
        
        String  str1=new String(buf,"gbk");
        System.out.println("文件中的內容為"+str1);
        raf.close();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM