Datoteke

Iz MaFiRaWiki

Vsebina

Datoteka

Datoteka je zaporedje podatkov, ki so shranjeni na disku ali kakem drugem mediju (CD-ROM, disketa). V datotekah hranimo različne podatke: besedila, preglednice, slike, glasbo, programe,...

Datoteke, ki so dostopne na računalniku, so organizirane v datotečni sistem. To je drevesna struktura, ki je sestavljena iz direktorijev ali map. Pri operacijskem sistemu Microsoft Windows je vsak datotečni sistem poimenovan s svojo črko. (A: za disketo, C: za disk, D: za CD-ROM,... Vsaka datoteka ima ime in je shranjena v mapi. Polno ime datoteke dobimo tako, da zložimo skupaj njeno ime in mapo.

PRIMER: Dana je datoteka blablabla.txt na disku C:, v mapi hopsasa, ki je v podmapi tralala. Polno ime datoteke je potem: C:\tralala\hopsasa\blablabla.txt

OPOMBA: Imena direktorijev vedno ločujemo z znakom \. Ko pa pišemo znak \ v Javi, pa moramo napisati dvojni \\.

Preden lahko s programom z datoteke beremo ali nanjo pišemo, jo moramo najprej odpreti. Glede na to, ali želimo iz datoteke brati podatke, ali pa vanjo pisati, jo odpremo bodisi za branje bodisi za pisanje.

Branje datoteke

Recimo, da želimo brati z datoteke besedilo.txt. Ker je Java objektni programski jezik, datoteko odpremo tako, da preprosto naredimo nov objekt ustreznega razreda:

FileReader d = new FileReader("besedilo.txt");

S tem smo naredili nov objekt d, ki bo sam odprl datoteko besedilo.txt. Z datoteke lahko nato beremo z metodo read(char[], int, int). V večini primerov želimo brati posamezne vrstice, česar pa metoda read ne omogoča. Zato običajno naredimo še en objekt razreda BufferedReader, ki ga nato uporabljamo za branje posameznih vrstic:

BufferedReader datoteka = new BufferedReader(d);

Objekt datoteka spada v razred BufferedReader, ki vsebuje metodo readLine() za branje ene vrstice. Oglejmo si uporabo datotek v celotnem programu. Napišimo program IzpisiDatoteko.java, ki prebere vrstice dane datoteke in jih izpiše na zaslon:

Pisanje na datoteko

Za pisanje na datoteko besedilo.txt naredimo objekt razreda FileWriter:

FileWriter d =  new FileWriter("bar.txt");

Tako kot pri branju z datotek je tudi pisanje na datoteko z objektom razreda FileWriter nepraktično. V praksi večkrat zasledimo objekt PrintWriter:

PrintWriter datoteka = new PrintWriter(d);

Objekt razreda PrintWriter vsebuje metodi println in print, ki ju uporabljamo za zapisovanje na datoteke, pa tudi za izpisovanje na zaslon. Zelena

Primerjava datotek

Kako primerjamo med seboj dve datoteki?

Na začetku moramo definirati dva objekta tipa BufferedReader, saj bomo brali iz dveh datotek Najprej bomo šli čez prvo datoteko in preverili če se zaenkrat ujema z drugo. Če se, potem moramo iti še čez drugo datoteko, saj se lahko zgodi, da je le-ta lahko daljša. Uporabili bomo tip logičnih vrednosti "boolean", ki nam bo vrnil true, če sta datoteki enaki in false sicer. OPOMBA: Če bomo stavek na datoteko napisali v eni vrstici, na drugo datoteko pa bomo isti stavek napisali tako, da bomo vsako besedo vnesli v svojo vrstico, ne moremo pričakovati, da bo program vrnil "true".

Prepisovanje (kopiranje) datoteke na drugo datoteko

Ko želimo neko besedilo prekopirati iz ene datoteke na drugo, moramo najprej prebrati vsebino prve datoteke in nato določene stvari zapisati na drugo. Narediti moramo torej dva objekta, enega za branje (glej: "branje iz datotek") in drugega za pisanje (glej: "pisanje na datoteke"). V ukazno vrstico bomo torej podali torej najprej ime datoteke, iz kater bomo brali, nato pa še ime tiste, na katero želimo pisati. Na koncu ne smemo pozabiti obeh datotek zapreti.

Obdelovanje podatkov

V datoteki imamo podana cela števila, katerih vsoto želimo izračunati in jo izpisati v ukazno vrstico. Kako to storimo? Če bomo podajali cela števila, bo tudi vsota celo število, zato jo na začetku tudi tako definiramo. Da bi bil program napisan čim bolj enostavno, bomo pisali števila v datoteki vsakega v svojo vrsto.

Matrike na datoteki

Kako lahko v Javi v datoteko shranimo matriko celih števil?

Format zapisa: Prva vrstica v datoteki vsebuje število vrstic matrike, presledek(ali več) in nato število stolpcev matrike. V drugo vrstico podamo 1.vrstico matrike, v kateri so elementi, oziroma stolpci ločeni s presledki. V naslednji vrstici je 2.vrstica matrike in tako dalje...

PRIMER: Matriko v Javi:

int[][]matrika = {{1,1,1,1},{10,10,10,10},{100,100,100,100}};

zapišemo na datoteko:

3 4
1 1 1 1
10 10 10 10
100 100 100 100
Osebna orodja