Se afișează postările cu eticheta io. Afișați toate postările
Se afișează postările cu eticheta io. Afișați toate postările

miercuri, 7 ianuarie 2026

Gestionarea fișierelor și directoarelor. Clasa File

Clasa File în limbajul Java este o clasă de bază atunci când dorim să dezvoltăm o aplicație care va opera cu fișiere și directoare pe calculator. Această clasă face parte din pachetul java.io și ne permite să lucrăm cu fișiere, și nu neapărat să citim sau să scriem în ele, ci doar să le gestionăm (creare, ștergere, verificare etc.).

Clasa File de fapt reprezintă un fișier sau un director din sistemul de operare. Instanța File nu conține fișierul, ci doar informații despre locația lui. 

Astfel atunci când instanțiem clasa File nu se crează un fişier pe sistemul local, ci doar o instanţă ce incapsulează şirul specificat constructorului. 

Vom examina constructorii clasei File: 

a) File(String numeCale); Acest constructor creează un obiect File folosind calea completă către fișier sau director.
Exemplu: File fis = new File("c:\\jdk121.1\\bin\\javac.exe");

b) File(String dir, String subCale); 
Acest constructor primește două valori: directorul principal și numele fișierului sau subdirectoruluiJava le unește pentru a forma calea completă.
Exemplu: File f = new File("/tmp", "xyz");

c) File(File dir, String subCale); 
Acest constructor folosește un obiect File care reprezintă un director și numele fișierului din acel director
Exemplu: 
File f1 = new File("C:\\tmp");
File f2 = new File(f1, "xyz.java");

Exemplu de utilizare a celor trei constructori: 
import java.io.File;
public class Main {
public static void main(String[] args) {
File f1 = new File("C:\\tmp");
File f2 = new File("C:\\tmp\\test.txt");
File f3 = new File("C:\\tmp", "test2.txt");
File f4 = new File(f1, "test3.txt");

System.out.println(f2.getAbsolutePath());
System.out.println(f3.getAbsolutePath());
System.out.println(f4.getAbsolutePath());
}}
  
Toți acești constructori ajută la definirea locației unui fișier în sistemul de operare, dar nu creează fișierul. 

În cele ce urmează voi explica diverse metode a clasei File cu exemple practice de aplicare: 

Exemplu 1. Crearea unui fișier pe discul calculatorului: 

import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
  File f = new File("D:\\test.txt");
  if (f.createNewFile()) {
   System.out.println("Fișierul a fost creat.");
  } else {
  System.out.println("Fișierul există deja.");
}}}
 

Dacă fișierul nu există acesta va fi creat, iar dacă există deja nu va fi creat din nou.

Exemplu 2. Ștergerea unui fișier pe discul calculatorului: 

import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
File f = new File("D:\\test.txt");
if (f.delete()) {
System.out.println("Fișier șters.");
} else {
System.out.println("Fișierul nu a putut fi șters.");
}}}


Exemplu 3. Verifică dacă un fișier există sau nu pe discul calculatorului: 

import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
File f = new File("D:\\test.txt");
if (f.exists()) {
System.out.println("Fișierul există.");
} else {
System.out.println("Fișierul nu există.");
}
}}

Exemplu 4. Afișarea informațiilor despre fișier: 
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
File f = new File("D:\\test.txt");
System.out.println("Dimensiune: " + f.length() + " Bytes");
System.out.println("Calea absolută: " + f.getAbsolutePath());
System.out.println("Poate fi citit: " + f.canRead());
System.out.println("Poate fi scris: " + f.canWrite());
}} 

Exemplu 5. Crearea unui director: 

import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
File director = new File("d:\\documente");
if (director.mkdir()) {
System.out.println("Director creat.");
}}}

  

Exemplu 6. Navigarea prin sistemul de fișiere: 

import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
File director = new File("D:\\documente");
String[] lista = director.list();
for (String nume : lista) {
System.out.println(nume);
}
}}
       

Clasa File este calea prin care programele Java pot interacționa cu fișierele și directoarele de pe calculator. Cu ajutorul ei putem crea și șterge fișiere, verifica dacă acestea există, obține informații despre ele sau explora conținutul unui director.
Dar....... în Java nu lucrăm doar cu clasa File atunci când vine vorba de prelucrarea conținutului fișierului. Ea este utilă pentru gestionarea fișierelor și directoarelor, dar pentru citirea și scrierea datelor se folosesc și alte clase. 
În practică, File este doar prima etapă, iar apoi folosim clase pentru fluxuri de date (streams).
În următoarele postări le vom explora! 👌

Succes!
❤️

duminică, 4 ianuarie 2026

Fluxuri de intrare și fluxuri de ieșire

În Java operațiile de intrare / ieșire au la bază termenul de stream (flux) introdus pentru prima dată de Dennis Ritchie care în 1984 implementează primul sistem I/O pe baza de stream în cadrul S.O. Unix. 
Ideea de stream are la bază crearea unui canal de comunicaţie între două entităţi. Una dintre entităţi este sursa, iar cealaltă destinaţia. 
Sursa scrie informaţii în canal, iar destinaţia citeşte aceste date. 
Canalul permite trecerea unui flux de date într-o singură direcţie. 
Deoarece există două direcţii de comunicare, există două tipuri mari de stream-uri: de intrare (input stream) și de ieșire(output stream)
Un flux care citește date se numește de intrare, iar cel care scrie date se numește de ieșire.

Java oferă mai multe clase și interfețe pentru lucrul cu fluxurile de intrare /ieșire grupate în pachetul în pachetul java.io.

Majoritatea metodelor claselor I/O pot genera excepții care trebuie tratate. Cum ? Studiați aici 👉 Tratarea excepțiilor în Java

Fluxurile de date, atât cele de intrare (citire), cât și cele de ieșire (scriere), pot fi de două tipuri: fluxuri de octeți și fluxuri de caractere.

Pentru a înțelege diferența dintre aceste două tipuri de fluxuri, este bine să facem distincția dintre fișiere text și fișiere binare.

Un fișier text este un fișier al cărui conținut poate fi deschis și modificat cu un editor de text, de exemplu Notepad. În astfel de fișiere informația este salvată sub formă de caractere, iar utilizatorul poate citi direct conținutul.

În schimb, fișierele binare conțin date salvate într-un format special, care nu poate fi interpretat corect de un editor de text. Aceste fișiere sunt create pentru a fi citite și procesate de anumite programe. Exemple de fișiere binare sunt imaginile, fișierele audio, video sau programele executabile.

Un exemplu simplu care ilustrează diferența dintre fișiere text și fișiere binare este cel al fișierelor utilizate în Java.

De exemplu, fișierul sursă *.java este stocat într-un fișier text, care poate fi deschis și citit cu orice editor de text, precum Notepad sau alte editoare de programare. În schimb, fișierul *.class, care rezultă după compilarea programului, este un fișier binar, destinat să fie citit și executat de JVM (Java Virtual Machine).

În realitate, calculatorul nu face o diferență clară între fișiere text și fișiere binare, deoarece toate fișierele sunt stocate în format binar. Diferența constă în modul în care aceste date sunt interpretate și utilizate. În cazul fișierelor text, datele sunt codificate astfel încât să reprezinte caractere lizibile pentru utilizator.

Fluxurile de intrare/ieșire bazate pe caractere sunt construite pe baza fluxurilor binare, iar conversia dintre caractere și octeți se face automat. JVM se ocupă de codificarea și decodificarea caracterelor Unicode atunci când acestea sunt citite sau scrise în fișiere. Din acest motiv, fluxurile binare sunt, în general, mai eficiente, deoarece nu necesită conversii suplimentare.

În practică, este recomandat să folosim fluxuri bazate pe caractere atunci când lucrăm cu fișiere text, create de editoare de text, și fluxuri binare atunci când lucrăm cu fișiere binare, generate de programe sau de JVM.

Exemple de clase utilizate pentru fișiere binare: imagini, video, audio, fișiere executabile sau orice tip de date brute:
  • FileInputStream: citirea datelor binare din fișier
  • FileOutputStream: scrierea datelor binare în fișier
  • BufferedInputStream: citire binară mai rapidă
  • BufferedOutputStream: scriere binară mai rapidă
  • DataInputStream: citirea tipurilor primitive (int, double etc.)
  • DataOutputStream: scrierea tipurilor primitive
  • ObjectInputStream: citirea obiectelor salvate
  • ObjectOutputStream: salvarea obiectelor în fișier
Exemple de clase utilizate pentru fișiere text: .txt, .java, .html, .csv: 
  • FileReader: citirea caracterelor din fișier
  • FileWriter: scrierea caracterelor în fișier
  • BufferedReader: citirea liniilor de text
  • BufferedWriter: scrierea eficientă a textului
  • PrintWriter: scriere formatată de text
  • CharArrayReader: citirea caracterelor dintr-un tablou
  • CharArrayWriter: scrierea caracterelor într-un tablou
Un avantaj important al fișierelor binare este că ele sunt independente de schema de codificare a sistemului de operare, ceea ce le face portabile. Astfel, programele Java pot citi fișiere binare create de Java pe orice calculator. Din acest motiv, fișierele *.class sunt fișiere binare și pot fi executate de JVM pe orice sistem care suportă platforma Java. 
Succes!
💓