|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjava.io.RandomAccessFile
public class RandomAccessFile
此類別的實例支持對隨機存取檔案的讀取和寫入。隨機存取檔案的行為類似存儲在檔案系統中的一個大型 byte 陣列。存在指向該隱含陣列的鼠標或索引,稱為檔案指針;輸入操作從檔案指針開始讀取位元組,並隨著對位元組的讀取而前移此檔案指針。如果隨機存取檔案以讀取/寫入網要創建,則輸出操作也可用;輸出操作從檔案指針開始寫入位元組,並隨著對位元組的寫入而前移此檔案指針。寫入隱含陣列的當前末尾之後的輸出操作導致該陣列擴展。該檔案指針可以通過 getFilePointer 方法讀取,並通過 seek 方法設置。
通常,如果此類別中的所有讀取例程在讀取所需數量的位元組之前已到達檔案末尾,則拋出 EOFException(是一種 IOException)。如果由於某些原因無法讀取任何位元組,而不是在讀取所需數量的位元組之前已到達檔案末尾,則拋出 IOException,而不是 EOFException。需要特別指出的是,如果串流已被關閉,則可能拋出 IOException。
| 建構子摘要 | |
|---|---|
RandomAccessFile(File file,
String mode)
創建從中讀取和向其中寫入(可選)的隨機存取檔案串流,該檔案由 File 參數指定。 |
|
RandomAccessFile(String name,
String mode)
創建從中讀取和向其中寫入(可選)的隨機存取檔案串流,該檔案具有指定名稱。 |
|
| 方法摘要 | |
|---|---|
void |
close()
關閉此隨機存取檔案串流並釋放與該串流關聯的所有系統資源。 |
FileChannel |
getChannel()
返回與此檔案關聯的唯一 FileChannel 物件。 |
FileDescriptor |
getFD()
返回與此串流關聯的不透明檔案描述符物件。 |
long |
getFilePointer()
返回此檔案中的當前偏移量。 |
long |
length()
返回此檔案的長度。 |
int |
read()
從此檔案中讀取一個資料位元組。 |
int |
read(byte[] b)
將最多 b.length 個資料位元組從此檔案讀入 byte 陣列。 |
int |
read(byte[] b,
int off,
int len)
將最多 len 個資料位元組從此檔案讀入 byte 陣列。 |
boolean |
readBoolean()
從此檔案讀取一個 boolean。 |
byte |
readByte()
從此檔案讀取一個有符號的八位值。 |
char |
readChar()
從此檔案讀取一個字元。 |
double |
readDouble()
從此檔案讀取一個 double。 |
float |
readFloat()
從此檔案讀取一個 float。 |
void |
readFully(byte[] b)
將 b.length 個位元組從此檔案讀入 byte 陣列,並從當前檔案指針開始。 |
void |
readFully(byte[] b,
int off,
int len)
將正好 len 個位元組從此檔案讀入 byte 陣列,並從當前檔案指針開始。 |
int |
readInt()
從此檔案讀取一個有符號的 32 位整數。 |
String |
readLine()
從此檔案讀取文本的下一行。 |
long |
readLong()
從此檔案讀取一個有符號的 64 位整數。 |
short |
readShort()
從此檔案讀取一個有符號的 16 位數。 |
int |
readUnsignedByte()
從此檔案讀取一個無符號的八位數。 |
int |
readUnsignedShort()
從此檔案讀取一個無符號的 16 位數。 |
String |
readUTF()
從此檔案讀取一個字元串。 |
void |
seek(long pos)
設置到此檔案開頭測量到的檔案指針偏移量,在該位置發生下一個讀取或寫入操作。 |
void |
setLength(long newLength)
設置此檔案的長度。 |
int |
skipBytes(int n)
嘗試跳過輸入的 n 個位元組以丟棄跳過的位元組。 |
void |
write(byte[] b)
將 b.length 個位元組從指定 byte 陣列寫入到此檔案,並從當前檔案指針開始。 |
void |
write(byte[] b,
int off,
int len)
將 len 個位元組從指定 byte 陣列寫入到此檔案,並從偏移量 off 處開始。 |
void |
write(int b)
向此檔案寫入指定的位元組。 |
void |
writeBoolean(boolean v)
按單位元組值將 boolean 寫入該檔案。 |
void |
writeByte(int v)
按單位元組值將 byte 寫入該檔案。 |
void |
writeBytes(String s)
按位元組序列將該字元串寫入該檔案。 |
void |
writeChar(int v)
按雙位元組值將 char 寫入該檔案,先寫高位元組。 |
void |
writeChars(String s)
按字元序列將一個字元串寫入該檔案。 |
void |
writeDouble(double v)
使用 Double 類別中的 doubleToLongBits 方法將雙精度參數轉換為一個 long,然後按八位元組數量將該 long 值寫入該檔案,先定高位元組。 |
void |
writeFloat(float v)
使用 Float 類別中的 floatToIntBits 方法將浮點參數轉換為一個 int,然後按四位元組數量將該 int 值寫入該檔案,先寫高位元組。 |
void |
writeInt(int v)
按四個位元組將 int 寫入該檔案,先寫高位元組。 |
void |
writeLong(long v)
按八個位元組將 long 寫入該檔案,先寫高位元組。 |
void |
writeShort(int v)
按兩個位元組將 short 寫入該檔案,先寫高位元組。 |
void |
writeUTF(String str)
使用 modified UTF-8 編碼以與機器無關的方式將一個字元串寫入該檔案。 |
| 從類別 java.lang.Object 繼承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 建構子詳細資訊 |
|---|
public RandomAccessFile(String name,
String mode)
throws FileNotFoundException
FileDescriptor 物件來表示到檔案的連接。
mode 參數指定用以打開檔案的存取網要。允許的值及其含意如 RandomAccessFile(File,String) 建構子所指定的那樣。
如果存在安全管理器,則使用 name 作為其參數調用其 checkRead 方法,以查看是否允許對該檔案進行讀取存取。如果該網要允許寫入,那麼還使用 name 作為安全管理器的參數來調用其 checkWrite 方法,以查看是否允許對該檔案進行寫入存取。
name - 取決於系統的檔案名mode - 此存取 mode
IllegalArgumentException - 如果此網要參數與 "r"、"rw"、"rws" 或 "rwd" 的其中一個不相等
FileNotFoundException - 如果該網要為 "r",但給定的字元串表示一個現有的常規檔案,或者該網要以 "rw" 開頭,但給定的字元串不表示一個現有的可寫常規檔案,而且無法創建具有該名稱的新常規檔案,或者在打開或創建該檔案時發生一些其他錯誤
SecurityException - 如果存在安全管理器,並且其 checkRead 方法拒絕對該檔案的讀取存取,或者該網要為 "rw",並且該安全管理器的 checkWrite 方法拒絕對該檔案的寫入存取SecurityException,
SecurityManager.checkRead(java.lang.String),
SecurityManager.checkWrite(java.lang.String)
public RandomAccessFile(File file,
String mode)
throws FileNotFoundException
File 參數指定。將創建一個新的 FileDescriptor 物件來表示此檔案的連接。
mode 參數指定用以打開檔案的存取網要。允許的值及其含意為:
"rws" 和 "rwd" 網要的工作方式極其類似
值
含意
"r" 以只讀方式打開。調用結果物件的任何 write 方法都將導致拋出 IOException。"rw" 打開以便讀取和寫入。如果該檔案尚不存在,則嘗試創建該檔案。 "rws" 打開以便讀取和寫入,對於 "rw",還要求對檔案的內容或元資料的每個更新都同步寫入到底層存儲設備。 "rwd" 打開以便讀取和寫入,對於 "rw",還要求對檔案內容的每個更新都同步寫入到底層存儲設備。
FileChannel 類別的 force(boolean) 方法,分別傳遞 true 和 false 參數,除非它們始終應用於每個 I/O 操作,並因此通常更為高效。如果該檔案位於本地存儲設備上,那麼當返回此類別的一個方法的調用時,可以保證由該調用對此檔案所做的所有更改均被寫入該設備。這對確保在系統崩潰時不會丟失重要資訊特別有用。如果該檔案不在本地設備上,則無法提供這樣的保證。
"rwd" 網要可用於減少執行的 I/O 操作數量。使用 "rwd" 僅要求更新要寫入存儲的檔案的內容;使用 "rws" 要求更新要寫入的檔案內容及其元資料,這通常要求至少一個以上的低層級別 I/O 操作。
如果存在安全管理器,則使用 file 參數的路徑名作為其參數調用它的 checkRead 方法,以查看是否允許對該檔案進行讀取存取。如果該網要允許寫入,那麼還使用該路徑參數調用該安全管理器的 checkWrite 方法,以查看是否允許對該檔案進行寫入存取。
file - 該檔案物件mode - 存取網要,如上所述
IllegalArgumentException - 如果此網要參數與 "r"、"rw"、"rws" 或 "rwd" 的其中一個不相等
FileNotFoundException - 如果該網要為 "r",但給定的檔案物件不表示一個現有的常規檔案,或者該網要以 "rw" 開頭,但給定的檔案物件不表示一個現有的可寫常規檔案,而且無法創建具有該名稱的新常規檔案,或者在打開或創建該檔案時發生一些其他錯誤
SecurityException - 如果存在安全管理器,並且其 checkRead 方法拒絕對該檔案的讀取存取,或者該網要為 "rw",並且該安全管理器的 checkWrite 方法拒絕對該檔案的寫入存取SecurityManager.checkRead(java.lang.String),
SecurityManager.checkWrite(java.lang.String),
FileChannel.force(boolean)| 方法詳細資訊 |
|---|
public final FileDescriptor getFD()
throws IOException
IOException - 如果發生 I/O 錯誤。FileDescriptorpublic final FileChannel getChannel()
FileChannel 物件。
返回通道的 java.nio.channels.FileChannel#position()position 將始終等於 getFilePointer 方法返回的此物件的檔案指針偏移量。顯式或者通過讀取或寫入位元組來更改此物件的檔案指針偏移量將更改通道的位置,反之亦然。通過此物件更改此檔案的長度將更改通過檔案通道看到的長度,反之亦然。
public int read()
throws IOException
0x00-0x0ff)。如果尚無輸入可用,將阻塞此方法。
儘管 RandomAccessFile 不是 InputStream 的子類別,但此方法的行為與 InputStream 的 InputStream.read() 方法完全一樣。
-1。
IOException - 如果發生 I/O 錯誤。如果已到達檔案的末尾,則不拋出此異常。
public int read(byte[] b,
int off,
int len)
throws IOException
len 個資料位元組從此檔案讀入 byte 陣列。在至少一個輸入位元組可用前,此方法一直阻塞。
儘管 RandomAccessFile 不是 InputStream 的子類別,但此方法的行為與 InputStream 的 InputStream.read(byte[], int, int) 方法完全一樣。
b - 讀入資料的緩衝區。off - 寫入資料的陣列 b 中的初始偏移量。len - 讀取的最多位元組數。
-1。
IOException - 如果由於檔案結束之外的某種原因不能讀取第一個位元組,或者隨機存取檔案已關閉,或者發生其他 I/O 錯誤。
NullPointerException - 如果 b 為 null。
IndexOutOfBoundsException - 如果 off為負,len 為負,或者 len 大於 b.length - off
public int read(byte[] b)
throws IOException
b.length 個資料位元組從此檔案讀入 byte 陣列。在至少一個輸入位元組可用前,此方法一直阻塞。
儘管 RandomAccessFile 不是 InputStream 的子類別,但此方法的行為與 InputStream 的 InputStream.read(byte[]) 方法完全一樣。
b - 將資料讀入的緩衝區。
-1。
IOException - 如果由於檔案結束之外的某種原因不能讀取第一個位元組,或者隨機存取檔案已關閉,或者發生其他 I/O 錯誤。
NullPointerException - 如果 b 為 null。
public final void readFully(byte[] b)
throws IOException
b.length 個位元組從此檔案讀入 byte 陣列,並從當前檔案指針開始。在讀取到請求數量的位元組之前,此方法將從該檔案重複讀取。在讀取了請求數量的位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readFullyb - 將資料讀入的緩衝區。
EOFException - 如果在讀取所有位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final void readFully(byte[] b,
int off,
int len)
throws IOException
len 個位元組從此檔案讀入 byte 陣列,並從當前檔案指針開始。在讀取到請求數量的位元組之前,此方法將從該檔案重複讀取。在讀取了請求數量的位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readFullyb - 讀入資料的緩衝區。off - 資料的初始偏移量。len - 要讀取的位元組數。
EOFException - 如果在讀取所有位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public int skipBytes(int n)
throws IOException
n 個位元組以丟棄跳過的位元組。
此方法可能跳過一些較少數量的位元組(可能包括零)。這可能由任意數量的條件引起;在跳過 n 個位元組之前已到達檔案的末尾只是其中的一種可能。此方法從不拋出 EOFException。返回跳過的實際位元組數。如果 n 為負數,則不跳過任何位元組。
DataInput 中的 skipBytesn - 要跳過的位元組數。
IOException - 如果發生 I/O 錯誤。
public void write(int b)
throws IOException
DataOutput 中的 writeb - 要寫入的 byte。
IOException - 如果發生 I/O 錯誤。
public void write(byte[] b)
throws IOException
b.length 個位元組從指定 byte 陣列寫入到此檔案,並從當前檔案指針開始。
DataOutput 中的 writeb - 資料。
IOException - 如果發生 I/O 錯誤。
public void write(byte[] b,
int off,
int len)
throws IOException
len 個位元組從指定 byte 陣列寫入到此檔案,並從偏移量 off 處開始。
DataOutput 中的 writeb - 資料。off - 資料的初始偏移量。len - 要寫入的位元組數。
IOException - 如果發生 I/O 錯誤。
public long getFilePointer()
throws IOException
IOException - 如果發生 I/O 錯誤。
public void seek(long pos)
throws IOException
pos - 從檔案開頭以位元組為單位測量的偏移量位置,在該位置設置檔案指針。
IOException - 如果 pos 小於 0 或者發生 I/O 錯誤。
public long length()
throws IOException
IOException - 如果發生 I/O 錯誤。
public void setLength(long newLength)
throws IOException
如果 length 方法返回的檔案的現有長度大於 newLength 參數,則該檔案將被截短。在此情況下,如果 getFilePointer 方法返回的檔案偏移量大於 newLength,那麼在返回此方法後,該偏移量將等於 newLength。
如果 length 方法返回的檔案的現有長度小於 newLength 參數,則該檔案將被擴展。在此情況下,未定義檔案擴展部分的內容。
newLength - 檔案的所需長度
IOException - 如果發生 I/O 錯誤
public void close()
throws IOException
如果此檔案具有一個關聯的通道,那麼該通道也會被關閉。
Closeable 中的 closeIOException - 如果發生 I/O 錯誤。
public final boolean readBoolean()
throws IOException
boolean。此方法從該檔案的當前檔案指針開始讀取單個位元組。值 0 表示 false。其他任何值表示 true。在讀取了該位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readBooleanboolean 值。
EOFException - 如果此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final byte readByte()
throws IOException
b,其中 0 <= b <= 255,則結果將是:
(byte)(b)
在讀取了該位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readBytebyte 形式返回此檔案的下一個位元組。
EOFException - 如果此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final int readUnsignedByte()
throws IOException
在讀取了該位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readUnsignedByteEOFException - 如果此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final short readShort()
throws IOException
b1 和 b2,其中兩個值都在 0 和 255之間(包含),則此結果等於:
(short)((b1 << 8) | b2)
在讀取了這兩個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readShortEOFException - 如果在讀取兩個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final int readUnsignedShort()
throws IOException
b1 和 b2,其中 0 <= b1, b2 <= 255,則結果將等於:
(b1 << 8) | b2
在讀取了這兩個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readUnsignedShortEOFException - 如果在讀取兩個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final char readChar()
throws IOException
b1 和 b2,其中 0 <= b1, b2 <= 255,則結果將等於:
(char)((b1 << 8) | b2)
在讀取了這兩個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readCharchar。
EOFException - 如果在讀取兩個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final int readInt()
throws IOException
b1、b2、b3 和 b4,其中 0 <= b1, b2, b3, b4 <= 255,則結果將等於:
(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
在讀取了這四個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readIntint。
EOFException - 如果在讀取四個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final long readLong()
throws IOException
b1、b2、b3、b4、b5、b6、b7 和 b8,其中:
0 <= b1, b2, b3, b4, b5, b6, b7, b8 <=255,
則結果將等於:
((long)b1 << 56) + ((long)b2 << 48)
+ ((long)b3 << 40) + ((long)b4 << 32)
+ ((long)b5 << 24) + ((long)b6 << 16)
+ ((long)b7 << 8) + b8
在讀取了這八個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readLonglong。
EOFException - 如果在讀取八個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
public final float readFloat()
throws IOException
float。此方法從當前檔案指針開始讀取一個 int 值,類似於使用 readInt 方法,然後使用 Float 類別中的 intBitsToFloat 方法將該 int 轉換為一個 float。
在讀取了這四個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readFloatfloat。
EOFException - 如果在讀取四個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。readInt(),
Float.intBitsToFloat(int)
public final double readDouble()
throws IOException
double。此方法從當前檔案指針開始讀取一個 long 值,類似於使用 readLong 方法,然後使用 Double 類別中的 longBitsToDouble 方法將該 long 轉換為一個 double。
在讀取了這八個位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readDoubledouble。
EOFException - 如果在讀取八個位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。readLong(),
Double.longBitsToDouble(long)
public final String readLine()
throws IOException
文本行由回車(Enter)符 ('\r') 和一個換行符 ('\n') 結束,回車(Enter)符後面緊跟一個換行符,或者是檔案的末尾。不使用行結束符,並且在返回的字元串中不包括結束符。
在讀取了一個換行符、讀取了一個回車(Enter)符和它後面的位元組(查看是否為一個新行),到達檔案的末尾或者拋出異常之前,此方法一直阻塞。
DataInput 中的 readLineIOException - 如果發生 I/O 錯誤。
public final String readUTF()
throws IOException
從當前檔案指針開始讀取前兩個位元組,類似於使用 readUnsignedShort。此值給出已編碼字元串中隨後的位元組數,而不是結果字元串的長度。隨後的位元組然後解釋為 UTF-8 修改版格式的位元組編碼字元,並轉換為字元。
在讀取了所有位元組、檢測到串流的末尾或者拋出異常前,此方法一直阻塞。
DataInput 中的 readUTFEOFException - 如果在讀取所有位元組之前此檔案已到達末尾。
IOException - 如果發生 I/O 錯誤。
UTFDataFormatException - 如果這些位元組不表示 Unicode 字元串的有效 UTF-8 修改版編碼。readUnsignedShort()
public final void writeBoolean(boolean v)
throws IOException
boolean 寫入該檔案。值 true 寫出為值 (byte)1;值 false 寫出為值 (byte)0。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeBooleanv - 要寫入的 boolean 值。
IOException - 如果發生 I/O 錯誤。
public final void writeByte(int v)
throws IOException
byte 寫入該檔案。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeBytev - 要寫入的 byte 值。
IOException - 如果發生 I/O 錯誤。
public final void writeShort(int v)
throws IOException
short 寫入該檔案,先寫高位元組。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeShortv - 要寫入的 short。
IOException - 如果發生 I/O 錯誤。
public final void writeChar(int v)
throws IOException
char 寫入該檔案,先寫高位元組。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeCharv - 要寫入的 char 值。
IOException - 如果發生 I/O 錯誤。
public final void writeInt(int v)
throws IOException
int 寫入該檔案,先寫高位元組。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeIntv - 要寫入的 int。
IOException - 如果發生 I/O 錯誤。
public final void writeLong(long v)
throws IOException
long 寫入該檔案,先寫高位元組。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeLongv - 要寫入的 long。
IOException - 如果發生 I/O 錯誤。
public final void writeFloat(float v)
throws IOException
Float 類別中的 floatToIntBits 方法將浮點參數轉換為一個 int,然後按四位元組數量將該 int 值寫入該檔案,先寫高位元組。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeFloatv - 要寫入的 float 值。
IOException - 如果發生 I/O 錯誤。Float.floatToIntBits(float)
public final void writeDouble(double v)
throws IOException
Double 類別中的 doubleToLongBits 方法將雙精度參數轉換為一個 long,然後按八位元組數量將該 long 值寫入該檔案,先定高位元組。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeDoublev - 要寫入的 double 值。
IOException - 如果發生 I/O 錯誤。Double.doubleToLongBits(double)
public final void writeBytes(String s)
throws IOException
DataOutput 中的 writeBytess - 要寫入的位元組的字元串。
IOException - 如果發生 I/O 錯誤。
public final void writeChars(String s)
throws IOException
writeChar 方法。寫入從檔案指針的當前位置開始。
DataOutput 中的 writeCharss - 要寫入的 boolean 值。
IOException - 如果發生 I/O 錯誤。writeChar(int)
public final void writeUTF(String str)
throws IOException
首先,把兩個位元組從檔案的當前檔案指針寫入到此檔案,類似於使用 writeShort 方法並給定要跟隨的位元組數。此值是實際寫出的位元組數,而不是該字元串的長度。在該長度之後,按順序輸出該字元串的每個字元,並對每個字元使用 UTF-8 修改版編碼。
DataOutput 中的 writeUTFstr - 要寫入的字元串。
IOException - 如果發生 I/O 錯誤。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。