JAVA operacje na plikach

background image

OPERACJE NA PLIKACH


Odczyt z pliku


Załóż nowy projekt i nazwij jego główną klasę Wykaz. Od razu wykasuj cały kod i przekopiuj do programu
zawartość pliku Wykaz.java. Plik zawiera dwie klasy: klasę Student, która przechowuje informacje na temat
pojedynczego studenta oraz klasę Wykaz, która posiada tablicę studentów.
Przekopiuj na dysk C plik dane.txt, ma on następującą zawartość:



[4]
[STUDENT]
Jan
Kowalski
[OCENY]
[7]
5 4 5 4 4 3 2
[STUDENT]
Edith
Piaf
[OCENY]
[3]
4 2 2
[STUDENT]
Tse Tung
Mao
[OCENY]
[5]
2 3 4 5 5
[STUDENT]
Ir Sen
Kim
[OCENY]
[4]
5 5 5 5

Pierwsza czwórka oznacza, ze chcemy wczytać dane na temat czterech studentów.
Następnie należy odczytać identyfikator [STUDENT], potem imię i nazwisko a następnie
tyle ocen, ile jest podane w kwadratowych nawiasach pod identyfikatorem [OCENY].
Zakładamy, że plik jest skonstruowany poprawnie.

Czytanie z pliku wymaga użycia pakietu io (input-output), zadeklaruj więc u góry:

import java.io.*;

W funkcji main wpisz dwie linijki:

FileReader czytacz = new FileReader("C:\\dane.txt");
BufferedReader buf = new BufferedReader(czytacz);

Poczekaj chwilę i przeczytaj błąd, który zgłosi NetBeans.
Powinno pojawić się: „

unreported exception java.io.FileNotFoundException, must be

caught or declared to be thrown


Konstrukcja łapania wyjątku wygląda podobnie jak w języku C. Przerób funkcję main tak,
by jej zawartość wyglądała następująco:

try{

FileReader czytacz = new FileReader("C:\\dane.txt");

BufferedReader buf = new BufferedReader(czytacz);

}catch(FileNotFoundException wyjatek){
System.out.println("Nie znaleziono pliku.");
}

W powyższej konstrukcji łapiemy wyjątek nieznalezienia pliku, czyli wyjątek typu

FileNotFoundException

. Typy wyjątków w Javie mają zwykle bardzo sugestywne nazwy.


Na razie jeszcze niczego nie odczytujemy z pliku, tylko otwieramy go do odczytu. Obiekt klasy BufferedReader
składa znaki odczytywane z pliku w obiekty wygodniejsze do obróbki (np. w linijki, tablice, ....).

Najpierw musimy odczytać pierwszą linijkę, żeby wiedzieć, ilu studentów musimy przechować w tablicy. Jako dwie
ostatnie linijki w try dopisz:

String linijka;
linijka = buf.readLine();

Poczekaj chwilę i przeczytaj błąd, który się pojawi. Tym razem nie obsłużono wyjątku java.io.IOException.
Nie trzeba wcale dopisywać nowego try-catch’a, wystarczy zamienić w już istniejącym catch’u typ

FileNotFoundException na typ IOException, ponieważ typ FileNotFoundException dziedziczy po
IOException.

Z pierwszej odczytanej linijki należy wyciąć klamerki i to co zostanie zamienić na liczbę. Jako ostatnie linijki w try
wklej:

linijka = linijka.substring(linijka.indexOf('[')+1,linijka.indexOf(']'));
wykazStudentow = new Student[Integer.parseInt(linijka)];


Dla sprawdzenia, czy tablica studentów została poprawnie zainicjowana, możesz wpisać w funkcji main:

System.out.println(wykazStudentow.length);

Program powinien wypisać cyfrę 4.

Jako ostatnią linijkę w try wpisz pomocnicze zmienne:

String imie, nazwisko, ile, listaOcen,ocenyPoszczegolne[];

mgr Agnieszka Patyk, Wydział FTiMS, Politechnika Gdańska, 2007

background image

Skoro wiemy już ilu mamy studentów, możemy odczytać ich dane w pętli for (jako ostatnie linijki w try):


for(int i=0;i<wykazStudentow.length;i++){

buf.readLine();

// 1 linijka na [STUDENT], nigdzie jej nie zapamiętujemy


imie = buf.readLine();
nazwisko = buf.readLine();

buf.readLine();

// 1 linijka na [OCENY], nigdzie jej nie zapamiętujemy

ile = buf.readLine();

// liczba ocen w klamerkach - trzeba je wyciąć:

ile = ile.substring(ile.indexOf('[')+1,ile.indexOf(']'));

// mamy już wszystkie potrzebne dane do utworzenia obiektu

wykazStudentow[i] = new Student(imie,nazwisko,Integer.parseInt(ile));

// odczytujemy oceny:

listaOcen = buf.readLine();

// linijka z ocenami jest postaci „liczba spacja liczba spacja ....”, więc rozcinamy ją po spacjach i

// wrzucamy pozostałe jej części do tablicy ocenyPoszczegolne:

ocenyPoszczegolne = new String[wykazStudentow[i].oceny.length];
ocenyPoszczegolne = listaOcen.split(" ");

// trzeba jeszcze przerobić napisy z ocenami na liczby:

for(int k=0;k<wykazStudentow[i].oceny.length;k++)
wykazStudentow[i].oceny[k] = Double.parseDouble(ocenyPoszczegolne[k]);

}




Można już napisać w funkcji main:

for(int i=0;i<wykazStudentow.length;i++)
System.out.println(wykazStudentow[i]);

Przetestuj, czy program prawidłowo wyświetla informacje o studentach.

Zapis do pliku


W tym samym programie pod koniec try wpisz:

FileWriter pisacz = new FileWriter("C:\\wyniki.txt");

for(int i=0;i<wykazStudentow.length;i++)
pisacz.write(wykazStudentow[i].toString()+"\n");

pisacz.close();


Przetestuj program.

Otwórz plik wyniki.txt w Notatniku. Najprawdopodobniej przejście do nowej linii oznaczone jest kwadracikiem.
W programie dwa razy występuje

\n

(raz w funkcji toString i raz w zapisie do pliku)– zamień to na

\r\n

i

jeszcze raz uruchom program. Ponownie otwórz plik wyniki.txt w Notatniku.

mgr Agnieszka Patyk, Wydział FTiMS, Politechnika Gdańska, 2007


Wyszukiwarka

Podobne podstrony:
JAVA operacje na plikach
4 Operacje na Plikach ppt
34 Pliki Operacje na plikach w Pascalu
operacje na plikach
Lab 11 Operacje na plikach
Operacje na plikach i folderach
Lab 02 Operacje na plikach
Lab 11 Operacje na plikach
Podstawowe operacje na plikach i katalogach, Linux
Operacje na plikach i folderach
Operacje na plikach tekstowych
Lekcja 2 Operacje na plikach skoroszytów Zarządzanie arkuszami i skoroszytami Współpraca z siecią
Asembler Operacje na Plikach
operacje na plikach
Lab 11 Operacje na plikach
NC+Windows Operacje na plikach, ETI Edukacja technicyno inf,, KONSPEKTY, Konspekty
Operacje na plikach, STUDIA, WIŚ PK, MatLab

więcej podobnych podstron