This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:tutorial-io [2017/09/26 14:47] Mihai Burduselu [Importarea API-ului] |
laboratoare:tutorial-io [2017/10/01 22:07] (current) Adriana Draghici [Tutorial I/O] |
||
---|---|---|---|
Line 1: | Line 1: | ||
= Tutorial I/O = | = Tutorial I/O = | ||
- | * Responsabil: todo | + | * Responsabil: [[michelcatalin@gmail.com|Mihai Burdușelu]] |
- | * Data publicării: todo | + | * Data publicării: 01.10.2017 |
- | * Data ultimei modificări: todo | + | * Data ultimei modificări: 28.09.2017 |
==Obiective== | ==Obiective== | ||
Scopul acestui tutorial este de a vă familiariza cu API-ul pus la dispoziție pentru citirea și scrierea în fișier. În cadrul laboratoarelor și temelor puteți importa acest API sau puteți sa folosiți o implementare proprie. | Scopul acestui tutorial este de a vă familiariza cu API-ul pus la dispoziție pentru citirea și scrierea în fișier. În cadrul laboratoarelor și temelor puteți importa acest API sau puteți sa folosiți o implementare proprie. | ||
+ | |||
+ | ==Introducere== | ||
+ | Acest API se folosește de [[http://docs.oracle.com/javase/8/docs/api/?java/io/FileReader.html|java.io.FileReader]] pentru a crea un flux de intrare de caractere. | ||
+ | |||
+ | [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html|BufferedReader]] este responsabil cu preluarea datelor de la un flux primitiv (''FileReader'') și procesarea acestora pentru a le oferi într-o altă formă. Patternul //Decorator// este aplicat aici, intrucat ''BufferedReader'' este un wrapper peste ''FileReader''. | ||
+ | De asemenea, [[https://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html|java.io.FileWriter]] este responsabil pentru crearea unui flux de ieșire de caractere, în vreme ce [[https://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html|BufferedWriter]] este un wrapper peste acesta. | ||
+ | |||
+ | ''BufferedReader'' are calitatea de a "buffera" fluxul de date. Astfel, această metodă de citire este mai eficientă decât folosirea directă a unui ''FileReader''. | ||
+ | |||
==Importarea API-ului== | ==Importarea API-ului== | ||
Acest API este livrat deja compilat sub formă de fișier JAR. | Acest API este livrat deja compilat sub formă de fișier JAR. | ||
- | Importarea unui astfel de proiect este explicata în acest [[laboratoare/importare-fisiere-jar|tutorial]]. | + | Importarea unui astfel de proiect este explicata în acest [[laboratoare:importare-fisiere-jar|tutorial]]. |
==Citirea dintr-un fișier text== | ==Citirea dintr-un fișier text== | ||
FileReader este clasa care manipulează operațiile de citire dintr-un fișier. Numele fișierului este pasat drept parametru către constructor. | FileReader este clasa care manipulează operațiile de citire dintr-un fișier. Numele fișierului este pasat drept parametru către constructor. | ||
<note> | <note> | ||
Deschiderea fișierului se face în momentul instanțierii obiectului. | Deschiderea fișierului se face în momentul instanțierii obiectului. | ||
- | Dacă fișierul nu se afla pe disc, API-ul va arunca FileNotFoundException. | + | Dacă fișierul nu se află pe disc, API-ul va arunca FileNotFoundException. |
</note> | </note> | ||
===Instanțierea unui obiect al clasei FileReader=== | ===Instanțierea unui obiect al clasei FileReader=== | ||
Line 21: | Line 30: | ||
FileReader fileReader = new FileReader(filename); | FileReader fileReader = new FileReader(filename); | ||
</code> | </code> | ||
- | ===Citirea tipurilor de date primitive din java=== | + | ===Citirea tipurilor de date primitive din Java=== |
- | FileReader conține metode de citire a tipurilor de date primitive din java: nextChar, nextBool, nextInt, nextLong, nextFloat si nextDouble. | + | FileReader conține metode de citire a tipurilor de date primitive din Java: ''nextChar'', ''nextBool'', ''nextInt'', ''nextLong'', ''nextFloat'' și ''nextDouble''. |
Exemplu de folosire a metodelor **next*** | Exemplu de folosire a metodelor **next*** | ||
<code text input.txt> | <code text input.txt> | ||
Line 41: | Line 50: | ||
În urma rulării codului de mai sus, se va afișa "//4 3.14 true//". | În urma rulării codului de mai sus, se va afișa "//4 3.14 true//". | ||
- | ===Citirea stringurilor delimitate de spatii=== | + | ===Citirea stringurilor delimitate de spații=== |
- | De asemenea, API-ul oferă și metodă de nextWord care are drept scop citirea unui string pană la întâlnirea primului spațiu. | + | De asemenea, API-ul oferă și metoda ''nextWord'' care are drept scop citirea unui string pană la întâlnirea primului spațiu. |
Exemplu de folosire a metodei **nextWord** | Exemplu de folosire a metodei **nextWord** | ||
<code text input.txt> | <code text input.txt> | ||
Line 63: | Line 72: | ||
===Închiderea fișierului=== | ===Închiderea fișierului=== | ||
- | După terminarea operației de citire din fișier, fișierul de citire trebuie închis folosind metoda **close()**. | + | După terminarea operației de citire din fișier, fișierul de citire trebuie închis folosind metoda ''close()''. |
==Scrierea în fișier== | ==Scrierea în fișier== | ||
Line 80: | Line 89: | ||
===Scrierea principalelor tipuri de date din java=== | ===Scrierea principalelor tipuri de date din java=== | ||
FileWriter conține metode de **write***, complementare cu metodele **next*** din FileReader. | FileWriter conține metode de **write***, complementare cu metodele **next*** din FileReader. | ||
- | Metoda **writeNewLine()** trece pe o linie noua în fișier. | + | Metoda ''writeNewLine()'' trece pe o linie nouă în fișier. |
Exemplu de folosire a metodelor **write*** | Exemplu de folosire a metodelor **write*** | ||
Line 104: | Line 113: | ||
===Închiderea fișierului=== | ===Închiderea fișierului=== | ||
- | După terminarea operației de scriere în fișier, fișierul de scriere trebuie închis folosind metoda **close()**. | + | După terminarea operației de scriere în fișier, fișierul de scriere trebuie închis folosind metoda ''close()''. |
==Abstractizare pentru manipularea ambelor fluxuri de date== | ==Abstractizare pentru manipularea ambelor fluxuri de date== | ||
- | În cazul în care programul are nevoie atât de citire dintr-un fișier denumit input, cât și de scriere într-altul denumit output, API-ul oferă o abstractizare numită FileSystem. | + | În cazul în care programul are nevoie atât de citire dintr-un fișier denumit input, cât și de scriere într-altul denumit output, API-ul oferă o abstractizare numită ''FileSystem''. |
- | Cele 2 fișiere (input și output) sunt pasate drept parametri către constructor. | + | Cele 2 fișiere (input și output) sunt date drept parametri către constructor. |
===Instanțierea unui obiect al clasei FileSystem=== | ===Instanțierea unui obiect al clasei FileSystem=== | ||
Line 127: | Line 136: | ||
===Închiderea fișierelor=== | ===Închiderea fișierelor=== | ||
După terminarea operațiilor de citire, respectiv scriere, ambele fișiere trebuie închise folosind metoda **close()**. | După terminarea operațiilor de citire, respectiv scriere, ambele fișiere trebuie închise folosind metoda **close()**. | ||
+ | |||
+ | ==Alte modalități de a manipula fluxurile intrare-ieșire== | ||
+ | * [[https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html|RandomAccessFile]] | ||
+ | |||
==Resurse== | ==Resurse== | ||
+ | * [[https://docs.oracle.com/javase/tutorial/essential/io/|Basic I/O]] | ||
* {{laboratoare:tutorial-io:fileio.zip|FileIO}} | * {{laboratoare:tutorial-io:fileio.zip|FileIO}} | ||
* {{laboratoare:tutorial-io:fileio_jar.zip|FileIO JAR}} | * {{laboratoare:tutorial-io:fileio_jar.zip|FileIO JAR}} |