„Vom începe cu fluxuri de intrare/ieșire a fișierelor. Dar mai întâi lucrurile.”
Există două clase pentru citirea și scrierea fișierelor: FileInputStream și FileOutputStream . După cum probabil ai ghicit deja, FileInputStream poate citi secvenţial octeţi dintr-un fişier, iar FileOutputStream poate scrie secvenţial octeţi într-un fişier. Iată metodele pe care le au aceste clase:
Metodă | Ce face metoda |
---|---|
|
— Acesta este constructorul. Vă permite să specificați numele unui fișier de pe disc, de pe care obiectul creat va citi datele. |
|
— Această metodă citește un octet din fișier și îl returnează. Valoarea returnată este extinsă la un int. |
|
— Această metodă returnează numărul de octeți necitiți (disponibili). |
|
— Această metodă „închide” fluxul. Numiți asta când ați terminat de lucrat cu fluxul. Obiectul efectuează apoi operațiunile de întreținere necesare închiderii fișierului etc. În acest moment, nu mai puteți citi date din flux. |
Doar pentru distracția, să calculăm suma tuturor octeților dintr-un fișier. Iată cum arată codul:
public static void main(String[] args) throws Exception
{
//Create a FileInputStream object bound to «c:/data.txt».
FileInputStream inputStream = new FileInputStream("c:/data.txt");
long sum = 0;
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); //Read the next byte
sum += data; //Add it to the running total
}
inputStream.close(); // Close the stream
System.out.println(sum); // Display the sum on the screen.
}
„Ne-am uitat deja la ceva de genul acesta. Cum este organizat FileOutputStream?”
"OK. Uită-te la asta:"
Metodă | Ce face metoda |
---|---|
|
"Acesta este constructorul. Vă permite să specificați numele unui fișier de pe disc, pe care obiectul creat va scrie date." |
|
„Această metodă scrie următorul octet, trunchiind datele la un octet.” |
|
„Datele care urmează să fie scrise sunt adesea colectate mai întâi în blocuri mari din memorie și apoi scrise doar pe disc”.
Comanda de flush forțează ca toate informațiile nesalvate să fie scrise pe disc. |
|
„Această metodă „închide” fluxul. O numiți când ați terminat de lucrat cu fluxul.” Obiectul efectuează apoi operațiunile de menaj necesare închiderii dosarului etc. |
Nu mai puteți scrie date în flux, iar fluxul este apelat automat.
"Asta este?"
"Da, există de fapt o singură metodă de scriere: write(). Scrie doar un octet la un moment dat. Dar vă permite să scrieți câte informații doriți în fișier."
Programarea este un proces de împărțire a unei sarcini mari și complexe în mai multe sarcini mici. În esență, același proces are loc aici: citirea și scrierea de blocuri mari de date este împărțită în citire și scriere în bucăți de dimensiuni mici - câte un octet.
Iată cum puteți utiliza aceste clase pentru a copia un fișier pe disc:
public static void main(String[] args) throws Exception
{
//Create a stream to read bytes from a file
FileInputStream inputStream = new FileInputStream("c:/data.txt");
//Create a stream to write bytes to a file
FileOutputStream outputStream = new FileOutputStream("c:/result.txt");
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); // Read the next byte into the data variable
outputStream.write(data); // and write it to the second stream
}
inputStream.close(); //Close both streams. We don't need them any more.
outputStream.close();
}
— Mulțumesc, Rishi. În sfârșit, înțeleg cum funcționează de fapt acest cod.
GO TO FULL VERSION