1. 程式人生 > >java 文件操作

java 文件操作

file path str read 接口 point class fse 隨機 定義

文件操作——File

File表示目錄信息

  • listFiles方法
  • File的listFiles方法用於返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。其方法定義:

    File[] listFiles()
  • 返回值:抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件和目錄。如果目錄為空,那麽數組也將為空。如果抽象路徑名不表示一個目錄,或者發生 I/O 錯誤,則返回 null。

  • FileFilter接口
  • 通過listFiles方法我們可以獲取一個目錄下的所有子項,但有些時候我們並不希望獲取全部子項,而是想獲取部分滿足我們實際需求的子項時,我們可以使用File的重載方法:

    File[] listFiles(FileFilter filter)

      這裏我們看到,該重載方法 要求我們傳入一個參數,其類型是FileFilter。什麽是FileFilter呢? FileFilter是用於抽象路徑名的過濾器,說白了就是定義一個規律規則,那麽結合listFiles方法,我們就可以將滿足此過濾規則的子項返回,其他則忽略。

  • FileFilter是一個接口,所以當我們需要定義某種過濾規則時,我們可以定義一個類來實現這個接口,而此接口的實例可傳遞給 File 類的listFiles(FileFilter) 方法。

    例如:

    File[] list = dir.listFiles(new
    FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().startsWith("."); } });

    該方法的參數FileFilter實例的accept方法並進行過濾,listFiles方法會將所有accept方法返回true的子項保留並返回。這個例子裏我們會將dir中子項的名字以"."開頭的返回。

文件操作——RandomAccessFile

創建對象

簡介

Java提供了一個可以對文件隨機訪問的操作,訪問包括讀和寫操作。該類名為RandomAccessFile。該類的讀寫是基於指針的操作。

只讀模式

  RandomAccessFile在對文件進行隨機訪問操作時有兩個模式,分別為只讀模式(只讀取文件數據),和讀寫模式(對文件數據進行讀寫)。
只讀模式:

  RandomAccessFile(File file,String mode)
    
  RandomAccessFile(String filename,String mode)

  在創建RandomAccessFile時,其提供的構造方法要求我們傳入訪問模式: 其中構造方法的第一個參數是需要訪問的文件,而第二個參數則是訪問模式:

r”:字符串”r”表示對該文件的訪問是只讀的。

讀寫模式
  創建一個基於文件訪問的讀寫模式的RandomAccessFile我們只需要在第二個參數中傳入”rw”即可。

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

那麽這時在使用RandomAccessFile對該文件的訪問就是又可讀又可寫的。

字節數據讀寫操作

  • write(int d)方法

  • java void write(int d)

  RandomAccessFile提供了一個可以向文件中寫出字節的方法:
該方法會根據當前指針所在位置處寫入一個字節,是將參數int的”低8位”寫出。

  • read()方法

  • java int read()

  RandomAccessFile提供了一個可以從文件中讀取字節的方法:
該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) 填充到int的低八位, 高24位為0, 返回值範圍正數: 0~255, 如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取後自動移動文件指針, 準備下次讀取。

  • write(byte[] d)方法

  • java void write(byte[] d)

RandomAccessFile提供了一個可以向文件中寫出一組字節的方法:

該方法會根據當前指針所在位置處連續寫出給定數組中的所有字節,與該方法相似的還有一個常用方法:

void write(byte[] d,int offset,int len)

該方法會根據當前指針所在位置處連續寫出給定數組中的部分字節,這個部分是從數組的offset處開始,連續len個字節。

  • read(byte[] d)方法

  • java int read(byte[] b)
    RandomAccessFile提供了一個可以從文件中批量讀取字節的方法:
    該方法會從文件中嘗試最多讀取給定數組的總長度的字節量,並從給定的字節數組第一個位置開始,將讀取到的字節順序存放至數組中,返回值
    為實際讀取到的字節量 。

  • close方法

RandomAccessFile在對文件訪問的操作全部結束後,要調用close()方法來釋放與其關聯的所有系統資源。

java void close()

例如:

java RandomAccessFile raf = new RandomAccessFile(file,”rw”); …..//讀寫操作 raf.close();//訪問完畢後要關閉以釋放系統資源。

?

文件指針操作

getFilePointer方法

RandomAccessFile的讀寫操作都是基於指針的,也就是說總是在指針當前所指向的位置進行讀寫操作。
RandomAccessFile提供了一個可以獲取當前指針位置的方法:

long getFilePointer()

RandomAccessFile在創建時默認指向文件開始(第一個字節),通過getFilePointer方法獲取指針位置時值是"0"。
例如:

  RandomAccessFile raf = new RandomAccessFile(file,”rw”);
  System.out.println(raf.getFilePointer());//0
  raf.write(‘A’);//寫出一個字節後,指針自動向後移動到下一個字節位置
  System.out.println(raf.getFilePointer());//1
  raf.writeInt(3);
  System.out.println(raf.getFilePointer());//5
  raf.close();

seek方法

RandomAccessFile的提供了一個方法用於移動指針位置。

void seek(long pos)

使用該方法可以移動指針到指定位置。
例如:

  RandomAccessFile raf = new RandomAccessFile(file,”rw”);
  System.out.println(raf.getFilePointer());//0
  raf.write(‘A’);//指針位置1
  raf.writeInt(3);//指針位置5
  raf.seek(0);//將指針移動到文件開始處(第一個字節的位置)
  System.out.println(raf.getFilePointer());//0
  raf.close();

skipBytes方法

RandomAccessFile的提供了一個方法可以嘗試跳過輸入的 n 個字節以丟棄跳過的字節,方法定義為:

int skipBytes(int n)

該方法可能跳過一些較少數量的字節(可能包括零)。這可能由任意數量的條件引起;在跳過n個字節之前已到達文件的末尾只是其中的一種可
能。此方法不拋出 EOFException。返回跳過的實際字節數。如果 n 為負數,則不跳過任何字節。

java 文件操作