9. praktikum. Harjutused
NB! Praktikumiülesandeid antakse alati varuga, et ka kõige kiirematel/kogenumatel lahendajatel jätkuks tegevust. Seega pole mõtet kurvastada, kui te ei jõua kõiki lahendada. Vaadake ülesanded rahulikult üle ja lahendage ära just need, mis tunduvad teile huvitavad ja/või parajalt jõukohased/väljakutsuvad (kui just teie praktikumijuhendaja pole teile soovitanud mingit konkreetset ülesannet).
1. Kodeering
Ülesande eesmärk on katsetada, mis juhtub faili lugemisel ja kirjutamisel erinevate kodeeringute kasutamisel. Käivita meetod Charset.defaultCharset()
ja prindi tulemus välja. Windowsi puhul on tulemus tavaliselt windows-1257, linux ja mac puhul tavaliselt UTF-8, aga see sõltub konkreetse masina seadistusest. Seda kodeeringut kasutatakse siis, kui programmis kodeering määramata jätta.
Koosta programm kodeeringute katsetamiseks. Programm kirjutab tekstifaili, mille sisu on "Andje käsi väsis ärä, võtje käsi ei väsi kunagi". Faili kirjutamisel kodeeringut mitte määrata (kasutatakse default charset ehk vaikekodeeringut). Seejärel loeb programm sama tekstifaili sisse. Sisselugemisel kasutada vaikekodeeringust erinevat kodeeringut - kui defaultCharset()
tagastas windows-1257, siis kasuta UTF-8 ja vastupidi. Proovi programmi käivitada ja seleta programmi väljundit. Muuda programmi nii, et faili kirjutamisel kasutatakse vaikekodeeringust erinevat kodeeringut ja faili lugemisel ei määrata kodeeringut (kasutatakse vaikekodeeringut). Seleta programmi väljundit.
Vihje: Failide kodeeringut seletati täpsemalt 4. praktikumis.
2. Paroolid
Koostada peaklassi meetod, mis otsib argumendina antud failist paroolid ja kirjutab need faili paroolid.txt
. Parool on ühesõnaline ja asub sõne " parool: " järel samal real. Näidisfail on aadressil https://kodu.ut.ee/~marinai/peidetud.txt
ja see tuleks salvestada oma arvutisse. Peameetodis rakendada seda meetodit.
3. Puhverdatud vood
Kirjutada programm, mis kirjutab käsureal sisestatud sõne BufferedWriter
klassi abil faili, seejärel loeb faili sisu BufferedReader
abil sisse ja väljastab selle ekraanile. Kasuta UTF-8 kodeeringut. Muuda koodi nii, et BufferedWriter
objekt jääb sulgemata ja käivita programm uuesti. Kontrolli, kas faili kirjutati õige sisu.
4. Voo sulgemine
Ülesande eesmärk on katsetada, mis juhtub, kui faili korralikult ei suleta. Erinevate operatsioonisüsteemide puhul tekivad erinevad probleemid. Lahenda oma op-süsteemile vastav alamülesanne.
Windowsi kasutajad: Koosta programm, mis avab käsureal antud nimega faili (nt FileInputStream
abil) ja jätab faili lahti. Seejärel küsib programm kasutajalt System.in
kaudu mõne nalja. Käivita programm ja jäta see käima (nalja ootama). Proovi programmis avatud faili Windowsi File Explorer abil ümber nimetada. Mis veateate tekib? Muuda programmi nii, et enne nalja küsimist fail suletakse. Käivita programm uuesti ja proovi nüüd faili ümber nimetada.
Linux/Mac kasutajad: Koosta programm, mis avab käsureal antud nimega faili (nt FileInputStream
abil). Salvesta avatud voo objekt mingisse ArrayList
i. Seejärel ava sama fail uuesti (uus FileInputStream
) ja lisa samasse listi. Korda seda lõputult. Mitu faili suudab programm avada, enne kui ta kokku jookseb? Mis veateatega programm kokku jookseb? Muuda programmi nii, et voog suletakse enne listi lisamist. Mitu faili programm nüüd avada suudab?
5. Inimene
Luua klass Inimene
, mis sisaldab isendivälju eesnime, perenime ja laste nimede listi jaoks ning konstruktorit, mis väärtustab vastavad väljad. Peaklassis luua üks Inimese
isend ja kirjutada see faili kasutades voogu DataOutputStream
. Luua uus Inimese
isend saades selleks alginfo voo DataInputStream
abil. Andmed kuvada ekraanil enne faili kirjutamist ja pärast failist lugemist. Inimese sisse lugemine ei peaks tegema eeldusi laste nimede arvu kohta (laste arv peaks failis sisalduma).
6. Tagurpidi
Koostada peaklassi meetod, mis loeb faili FileInputStream
kasutades sisse ja kirjutab selle FileOutputStream
kasutades tagurpidi järjekorras uude faili välja. Meetod ei tohi eeldada, et tegu on tekstifailidega (mitte kasutada Scanner
, Reader
ega Writer
klasse). Peameetodis rakendada seda meetodit.
7. Peidetud andmed
Faili andmetefail.txt
alguses on antud (peidetud kujul) üks arv (long
-tüüpi), mis määrab asukoha samas failis, kus on peidus üks täisarv (int
-tüüpi). Kirjutage programm, mis kasutades klassi RandomAccessFile
loeb etteantud failist vastava arvu ja väljastab selle ekraanile. Fail on aadressil https://kodu.ut.ee/~marinai/andmetefail.txt
ja see tuleks salvestada oma arvutisse. Kasuks tulevad meetodid readLong
, seek
ning readInt
klassist RandomAccessFile
.