"Halo, Amigo!"

"Hai, Bilaabo! Piye kabare?"

"Apik, wingi aku nyoba nyingkirake parasit, nanging nganti saiki aku durung entuk sukses. Banjur aku kudu nginep ing tong sampah maneh."

"Dadi... apa kabeh isih apik?"

"Sampeyan bisa ngomong ngono."

"Apik. Dadi apa sing sampeyan duwe kanggo kula dina iki?"

"Dina iki aku bakal ngandhani sampeyan babagan kelas RandomAccessFile ."

RandomAccessFile, lsp - 1

"Iku, FileInputStream lan FileOutputStream makili file minangka stream: sampeyan mung bisa maca lan nulis kanthi urutan."

"Iku ora tansah super trep. Kadhangkala sampeyan kudu nulis saperangan baris ing tengah file, utawa maca saperangan kaca teks saka mburi file multi-megabyte. Iku bakal ora banget efisien kanggo maca. kabeh file kanggo tugas iki."

" Kelas RandomAccessFile digawe kanggo ngatasi masalah iki. Sampeyan bisa nggunakake aplikasi iku kanggo nulis ing ngendi wae ing file, maca saka iku, uga maca lan nulis menyang file ing wektu sing padha."

"Carane menarik!"

"Iya. Satemene lumayan trep."

"Nanging kepiye sampeyan maca saka lokasi sing sewenang-wenang?"

"Kabeh iku cukup prasaja. Mbayangno yen sampeyan duwe editor teks, kayata Notepad, mbukak. Wis kursor. Nalika sampeyan ngetik soko, teks ditambahake menyang ngendi wae kursor. Maca file padha. Maca diwiwiti saka ngendi wae 'kursor' iku. Nalika maca/nulis, kursor obah kanthi otomatis."

"Iki, luwih becik sampeyan nuduhake conto:"

Maca file:
// r - read, the file is opened only for reading.
RandomAccessFile raf = new RandomAccessFile("input.txt", "r");

// Move the «cursor» to the 100th character.
raf.seek(100);

// Read the line starting from the current cursor position until the end of the line.
String text = raf.readLine();

// Close the file.
raf.close();

"Ing conto iki, aku pengin narik kawigaten sampeyan menyang rong perkara:"

"Kaping pisanan, nggawe obyek RandomAccessFile . Argumentasi kapindho yaiku huruf r. Iki tegese file dibukak kanggo maca ( r - maca ). Yen sampeyan pengin mbukak file kanggo maca lan nulis, sampeyan kudu ngliwati « rw »kanggo konstruktor, tinimbang mung « r ».

"Kapindho, deleng cara nggoleki. Sampeyan bisa nggunakake cara iki kanggo mlumpat ing file lan ngganti posisi kursor kanggo operasi maca / nulis saiki. Nalika file dibukak pisanan, kursor disetel menyang bita kaping 0. Utawa, luwih akurat, sadurunge byte zeroth."

"Apa aku ngerti kanthi bener? Kita mbukak file kasebut, lan kursor ana ing wiwitan banget - ing posisi 0. Banjur kita nelpon nggoleki lan mindhah kursor menyang bait 100. Lan nalika kita nelpon readLine , wiwit maca saka bait satus. .Bener?"

"Ya. Nanging aku pengin narik kawigaten sampeyan yen cara nggoleki ngidini sampeyan mlumpat kanthi sewenang-wenang ing file kasebut. Contone: "

Maca file:
// r - read, the file is opened only for reading.
RandomAccessFile raf = new RandomAccessFile("input.txt", "r");

// The "cursor" is at the 0th character.
String text1 = raf.readLine();

// Move the "cursor" to the 100th character.
raf.seek(100);
String text2 = raf.readLine();

// Move the "cursor" to the 0th character.
raf.seek(0);
String text3 = raf.readLine();

// Close the file
raf.close();

"Ing conto iki, kita pisanan maca baris sing diwiwiti saka bait 0. Banjur kita mlumpat menyang bait satus lan maca baris ing kana. Banjur kita mlumpat menyang bait 0 maneh lan maca baris. Tegese text1 lan text3 padha. senar."

"Ah. Sing nggawe luwih cetha."

"Apik. Banjur iki conto liyane:"

Maca file:
// rw - read/write, the file is opened for reading and writing.
RandomAccessFile raf = new RandomAccessFile("seek.txt", "rw");

// Write to the file, starting from the 0th byte.
raf.writeBytes("It is a string");

// Move the "cursor" to the 8th character.
raf.seek(8);

// Write "surprise!" to the file.
raf.writeBytes("surprise!");

// Close the file.
raf.close();

"Ing kene kita mbukak file kanggo maca lan nulis kanthi ngliwati « rw » ( maca / nulis ) menyang konstruktor."

"Banjur kita nulis " Iku senar " menyang file.

"Banjur kita mindhah kursor menyang bait 8 (sing dadi wiwitan tembung 'string')"

"Banjur kita nulis « kagetan !""

"Akibate, file kasebut ngemot « Iku kaget !"

"Dadi, bait ora dilebokake ing tengah file, nanging ngganti sing ana?"

"Ya wis."

"Apa yen kita mindhah kursor menyang mburi file?"

"Banjur byte bakal ditulis nganti pungkasan, lan file bakal luwih gedhe. Dadi meh kaya nulis teks menyang editor teks."

"Hmm, aku rumangsa ngerti kabeh. Apa sampeyan bisa menehi dhaptar lengkap babagan metode kelas RandomAccessFile ?"

"Inggih.

Metode Katrangan
int read() Waca siji bait lan bali
int read(byte b[], int off, int len) Maca array saka bita
int read(byte b[]) Maca array saka bita
void readFully(byte b[]) Maca array bait, lan ngenteni bita anyar ditambahake yen ora cukup kanggo ngisi array
int skipBytes(int n) Skip n bita. Ing tembung liyane, iki gerakane kursor maju n bita.
void write(int b) Nulis siji bait menyang lokasi kursor
void write(byte b[]) Nulis array bita menyang lokasi kursor
void write(byte b[], int off, int len) Nulis array bita menyang lokasi kursor
long getFilePointer() Ngasilake nomer byte sing ditunjuk kursor. Bisa saka 0 nganti dawa file
void seek(long pos) Mindhah «kursor» sing digunakake kanggo maca/nulis menyang lokasi sing ditemtokake
long length() Ngasilake dawa file
void setLength(long newLength) Nyetel dawa file anyar. Yen file luwih gedhe, bakal dipotong; yen luwih cilik, banjur nggedhekake file lan ngisi spasi anyar kanthi nul
void close() Nutup file
boolean readBoolean() Maca boolean saka posisi kursor saiki ing file
byte readByte() Maca bait saka posisi kursor saiki ing file
char readChar() Maca char saka posisi kursor saiki ing file
int readInt() Maca int saka posisi kursor saiki ing file
long readLong() Maca dawa saka posisi kursor saiki ing file
float readFloat() Maca float saka posisi kursor saiki ing file
double readDouble() Maca pindho saka posisi kursor saiki ing file
String readLine() Maca baris saka file lan bali
void writeBoolean(boolean v) Nulis boolean menyang file (wiwit saka posisi kursor)
void writeByte(int v) t Nulis bait menyang file (wiwit saka posisi kursor)
void writeChar(int v) Nulis char menyang file (wiwit saka posisi kursor)
void writeInt(int v) Nulis int menyang file (wiwit saka posisi kursor)
void writeLong(long v) Nulis dawa menyang file (wiwit saka posisi kursor)
void writeFloat(float v) Nulis float menyang file (wiwit saka posisi kursor)
void writeDouble(double v) Nulis pindho menyang file (wiwit saka posisi kursor)
void writeBytes(String s) Nulis String menyang file (wiwit saka posisi kursor)
void writeChars(String s) Nulis String menyang file (wiwit saka posisi kursor)

"Hmm. Dadi, ana apa-apa anyar kene. Kajaba Mungkin ngupaya () / getFilePointer () lan dawa () / setLength () pasangan cara.

"Ya, Amigo. Kabeh meh padha. Nanging apa ora trep?"

"Iku trep. Matur nuwun, Bilaabo, kanggo pawulangan menarik lan kanggo conto sampeyan wis menehi kula."

"Seneng bisa nulungi, Amigo, kancaku!"