Fișierul cu acces direct este privit aici ca un tablou de octeți memorat într-un sistem de fișiere (de regulă în memoria externă). Există un cursor al fișierului (numit în engleză File Pointer), care se comportă ca un indice al acestui tablou. Valoarea acestui indice (poziția cursorului de fișier relativ la începutul acestuia) poate fi "citită" cu metoda getFilePointer() și poate fi modificată cu metoda seek(). Orice citire sau scriere se face începând de la poziția pe care se găsește acest cursor. La sfârșitul operației, cursorul se deplasează pe o distanță corespunzatoare cu numarul de octeți care au fost citiți sau scriși efectiv.
Fișierul cu acces direct poate fi deschis în modul read (numai
pentru citire), write (numai pentru scriere) sau read/write.
În ultimul caz, este posibil să se efectueze atât citiri , cât și
scrieri.
Scrierea în fișierele cu acces direct se poate face
atât în mod text (succesiunea de octeți fiind privită ca o
succesiune de caractere), cât și în mod binar, la fel ca
în fișierele de date, în care scrierea s-a făcut folosind un
DataOutputStream. În consecință, clasa RandomAccessFile oferă atât
metode de scriere și de citire de octeți, cât și metode de scriere și de
citire pentru toate tipurile de date primitive și pentru șiruri de
caractere, la fel ca în cazul claselor DataOutputStream și
DataInputStream. Este evident că, la citirea din fișier, trebuie
să se respecte modul în care acesta a fost scris.
Dacă la citire se întâlnește sfârșitul de fișier, se generează o excepție de sfârșit de fișier din clasa EOFException (End of File Exception), care este derivată din IOException. În toate celelalte cazuri când nu se poate efectua o operație de citire sau de scriere se genereaza o IOException (Input-Output Exception). |
Constructori public RandomAccessFile(String file, String mode) throws FileNotFoundException - deschide fișierul cu acces direct cu numele file în modul de exploatare mode. Modul poate fi "r" (numai citire) sau "rw" (citire si scriere); dacă este "rw" și fișierul nu există, se creează un fișier nou; public RandomAccessFile(File file, String mode) throws IOException - acționează asemănător cu constructorul precedent, dar calea și numele fișierului care se deschide sunt date de instanța file a clasei File. Metode |
Exemplu
În fișierul AccesDirect.java este
dat un exemplu de aplicație, în care se creează și se utilizează un
fișier cu acces direct, cu numele "Proba.fad". Prima dată fișierul este
deschis în mod "rw" (read/write). Se fac două serii de scrieri de date,
care apoi sunt citite și afișate. Înainte de fiecare citire a unei serii
de date se poziționează cursorul de fișier la începutul seriei
respective, iar datele se citesc respectând modul în care acestea au
fost scrise. Fișierul este apoi închis și redeschis în mod "r" ("read"),
după care se poziționează cursorul la începutul celei de a doua serii
de date, care este citită și afișată.