Documente Academic
Documente Profesional
Documente Cultură
Unicul mod în care datele pot intra sau ieşi dintr-o aplicaţie Java este
prin folosirea fluxului, respectiv a Stream-ului. Când vorbim despre
fluxuri, întotdeauna subînţelegem două tipuri, de ieşire şi de intrare.
De exemplu, comanda folosită frecvent, println, este de fapt o
comandă care emite textul în fluxul de ieşire. Noţiunea de flux nu se
numeşte aşa din întâmplare, ci din cauză că datele într-adevăr "curg"
către ieşire sau dinspre intrare. Mai precis, datele se deplasează
secvenţial, secțiune cu secțiune. În funcţie de natura fluxului, părţile
acestea sunt byţi sau caractere, tipuri primitive sau obiecte.
similară pentru toate tipurile de fluxuri: mai întâi este inițializat fluxul,
iar apoi sunt descărcate datele din el, secțiune cu secțiune sau, în
acest caz, byte cu byte.
Dacă rulăm codul anterior, vom vedea că la ieșire vom obține un șir de
valori întregi ce reprezintă codurile UNICODE pe care caracterele le au
în sistem.
System.out.print((char)c);
Bineînțeles, foarte rar vom utiliza această tehnică de citire a unui fișier
de text. O metodă mult mai eficientă este citirea linie după linie:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
sau
Fluxurile de date
out.writeInt(variableA);
out.writeDouble(variableB);
out.writeUTF(variableC);
} catch (IOException exc) {
System.out.println(exc);
}
}
System.out.println(in.readInt());
System.out.println(in.readDouble());
System.out.println(in.readUTF());
System.out.println("This is text.");
System.out.print("This is text.");
System.out.print("This is text.");
System.out.print("This is text.");
System.out.println("This is text.");
System.out.println("This is text.");
}
}
Haideți acum să vedem cum putem citi datele din consolă. Prima
modalitate este să utilizăm BufferedReader.
String s = bufferRead.readLine();
System.out.println("You entered: " + s);
} catch (IOException e) {
System.out.println(e);
}
}
În codul de mai sus, linia citită este întotdeauna sub forma unui string,
prin urmare trebuie să efectuăm parsarea dacă dorim să obținem date
de un alt tip. Putem întâmpina o problemă dacă, de exemplu, așteptăm
o valoare întreagă de la consolă, însă introducem un tip
necorespunzător. Începând cu Java versiunea 5, există clasa Scanner,
creată pentru a se ocupa de problemele de acest tip.
if (scan.hasNextInt()) {
int number = scan.nextInt();
System.out.println(number);
}
else
{
System.out.println("You must enter number!");
}
}
Exerciții
Exercițiul 1
Problemă:
id:01|firstName:Petar|lastName:Petrovic|jmbg:1234567890123
id:02|firstName:Jovan|lastName:Jovanovic|jmbg:1234567890124
id:03|firstName:Nikola|lastName:Nikolic|jmbg:1234567890125
User Id: 01
First name: Petar
Last name: Petrovic
Jmbg: 1234567890123
------------------------------------
User Id: 02
First name: Jovan
Last name: Jovanovic
Jmbg: 1234567890124
.....
Soluție:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new FileReader("users.txt"));
String line;
while((line=br.readLine())!=null)
{
String[] user = line.split("\\|");
System.out.println("User Id: " + user[0].split("\\:")[1]);
System.out.println("First name: " + user[1].split("\\:")[1]);
Exercițiul 2
Soluția 1:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
String tmpLine;
BufferedWriter bw = new BufferedWriter(new FileWriter("thirdFile.txt"));
BufferedReader br = new BufferedReader(new FileReader("firstFile.txt"));
while((tmpLine=br.readLine())!=null)
bw.write(tmpLine+"\n");
br.close();
br = new BufferedReader(new FileReader("secondFile.txt"));
while((tmpLine=br.readLine())!=null)
bw.write(tmpLine);
br.close();
bw.close();
}
}
Soluția 2:
import java.io.*;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException{
String tmpLine;
BufferedWriter bw = new BufferedWriter(new FileWriter("thirdFile.txt"));
ArrayList<BufferedReader> filesToRead = new ArrayList<BufferedReader>();
filesToRead.add(new BufferedReader(new FileReader("firstFile.txt")));
filesToRead.add(new BufferedReader(new FileReader("secondFile.txt")));
for(BufferedReader br : filesToRead)
{
while((tmpLine=br.readLine())!=null)
bw.write(tmpLine+"\n");
br.close();
}
bw.close();
}
}