Laboratorium Podstaw Programowania
Laboratorium V: Biblioteka II
1
Cel
W tym zadaniu poznasz podstawy korzystania z kolekcji w języku java oraz strumieni wejścia/wyjścia.
2
Wprowadzenie
Biblioteka, dla której zaimplementowaliśmy na poprzednich zajęciach system obsługi wzbogaciła się o spory zbiór książek
historycznych. Niestety nasz system ma pewną wadę, otóż nie ma możliwości przechowywania w nim więcej niż stu książek.
Twoim zadaniem jest rozwiązać ten problem.
3
Zadanie
3.1
Część 1
Powinieneś bazować na swoim rozwiązaniu poprzedniego zadania. Zadanie polega na takiej modyfikacji klasy Biblioteka,
aby była możliwość przechowywania w niej dowolnej liczby książek, ograniczonej tylko ilością pamięci komputera.
3.2
Część 2
Plik nowe_ksiazki.csv zawiera listę książek, które biblioteka otrzymała w prezencie od miejscowej księgarni historycz-
nej. Twoim zadaniem jest zaimplementowanie klasy KsiążkaHistoryczna, rozszerzającej klasę Ksiazka z poprzedniego
zadania, tak aby można w niej było przechować informacje zawarte na liście (tytuł, autor książki, wydawnictwo, słowny
opis). Następnie należy wczytać dane z pliku nowe_ksiazki.csv, tworząc nowy obiekt klasy KsiążkaHistoryczna dla
każdego wiersza i dodając go do kolekcji książek w bibliotece. Po zakończeniu dodawania książek do biblioteki wypisz na
konsolę ilość dodanych książek.
4
Sposób postępowania
Powinieneś zastąpić tablicę z klasy Biblioteka wybraną kolekcją. Zmieni się również sposób implementacji niektórych
metod.
W celu wczytania pliku linijka po linijce skorzystaj z klas java.io.BufferedReader i java.io.FileReader.
Klasa
BufferedReader posiada metodę String readLine(), za pomocą której można wczytać pojedynczą linię z pliku.
Podział linii na fragmenty odpowiadające parametrom książki możesz zrealizować za pomocą klasy java.util.StringTokenizer.
Konstruktor tej klasy przyjmuje dwa parametry: łańcuch tekstowy, który zostanie podzielony (czyli pojedyncza linia uzy-
skana metodą BufferedReader.readLine()) oraz wzorzec (string), który rozdziela wartości w linii (w naszym przypadku
wartości w pliku CSV oddziela znak tabulacji, czyli "\t").
Politechnika Wrocławska
Mateusz Lis
Strona 1 z 2
Laboratorium Podstaw Programowania
Laboratorium V: Biblioteka II
5
Uwagi
Spróbuj wykorzystać cechy danej kolekcji, np. wykorzystaj pętlę typu foreach zamiast zwyczajnej pętli for.
Do wczytania pliku CSV możesz użyć poniższy kod:
Listing 1: csv
try
{
B u f f e r e d R e a d e r
w e j s c i e
=
new
B u f f e r e d R e a d e r
(
new
F i l e R e a d e r
(
" n o w e _ k s i a z k i . csv "
) )
;
// otwieramy
p l i k
S t r i n g
l i n i a
;
while
( (
l i n i a
=
w e j s c i e
.
r e a d L i n e
( ) ) !=
n u l l
)
// wczytujemy
l i n i e
{
S t r i n g T o k e n i z e r t o k e n
=
new
S t r i n g T o k e n i z e r
(
l i n i a
,
" \ t "
) ;
// d z i e l i m y
l i n i e
S t r i n g
t y t u l
=
t o k e n
.
nextToken
( ) ;
S t r i n g
a u t o r
=
t o k e n
.
nextToken
( ) ;
S t r i n g wydawnictwo
=
t o k e n
.
nextToken
( ) ;
S t r i n g
o p i s
=
t o k e n
.
nextToken
( ) ;
// Tu s t w o r z nowa k s i a z k e
i
d o d a j do b i b l i o t e k i
}
w e j s c i e
.
c l o s e
( )
;
}
catch
(
I O E x c e p t i o n e
)
{
e
.
p r i n t S t a c k T r a c e
( )
;
}
Politechnika Wrocławska
Mateusz Lis
Strona 2 z 2