De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 5: Bestanden.

Verwante presentaties


Presentatie over: "Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 5: Bestanden."— Transcript van de presentatie:

1 Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 5: Bestanden

2 Inleiding Informatica Prof. Dr. O. De Troyer Bestanden op de harde schijf Gegevens in bestanden op de harde schijf (“disk files”) zijn persistent. –Blijft bestaan ook als we de computer uitzetten Disk files kunnen grote hoeveelheden informatie bevatten.

3 Inleiding Informatica Prof. Dr. O. De Troyer Bestand Bevat data (gegevens) –Een brief, een lijst van namen, een prijslijst van onderdelen, …. Heeft een naam –Naamgeving kan onderworpen zijn aan regels –Afhankelijk van het computer systeem

4 Inleiding Informatica Prof. Dr. O. De Troyer Operaties op bestanden Een bestand aanmaken Gegevens “wegschrijven” op een bestand Een bestand verwijderen (samen met de inhoud) Een bestand hernoemen De inhoud van een bestand overschrijven De inhoud van een bestand opvragen (“lezen”)

5 Inleiding Informatica Prof. Dr. O. De Troyer De klasse File Instantie (object) van de klasse File laat toe om naar een bestand te refereren. Constructor new File(bestandsnaam) File f1, f2 ; f1 = new File(“brief”); f2 = new File(“onzin”); Opgelet! New File maakt geen nieuw bestand aan, enkel een nieuw object. Bestand hoeft niet te bestaan

6 Inleiding Informatica Prof. Dr. O. De Troyer De klasse File (2) Bestand verwijderen –Methode delete() File f ; f = new File(“onzin”); f.delete(); Bestand hernoemen –Methode renameTo(fileObject) File f1, f2 ; f1 = new File(“onzin”); f2 = new File(“rommel”); f1.renameTo(f2);

7 Inleiding Informatica Prof. Dr. O. De Troyer Schrijven op een bestand (1) Om op een bestand te kunnen schrijven is een “stream” (soort kanaal) nodig –Een opeenvolging van data eenheden Java Programma Java Programma Bestand op disk Bestand op disk Stream Deze streams zijn objecten van de klasse FileOutputStream data

8 Inleiding Informatica Prof. Dr. O. De Troyer De klasse FileOutputStream Constructor new FileOutputStream(fileObject) File f = new File(“vrienden”); FileOutputStream fs = new FileOutputStream(f) ; –Deze constructor opent het bestand vrienden om er op te schrijven (of overschrijven) –Indien het bestand niet bestaat wordt een bestand gemaakt.

9 Inleiding Informatica Prof. Dr. O. De Troyer Schrijven op een bestand (2) FileOutputStream object alleen is nog niet voldoende. We willen een opeenvolging van karakters kunnen schrijven: –Object van de klasse PrintStream Constructor new PrintStream(fileOutputStreamObject) File f = new File(“gegevens.out”); FileOutputStream fs = new FileOutputStream(f) ; PrintStream pf = new PrintStream(fs) ; Methoden: print en println pf.println(“hallo bestand”);

10 Inleiding Informatica Prof. Dr. O. De Troyer Schrijven op een bestand (3) Overzicht –Maak File object om naar het bestand te refereren –Maak FileOutputStream object om het kanaal naar het bestand te representeren –Maak PrintStream object om kanaal te zien als opeenvolging van karakters. –Gebruik de print en println methoden om gegevens weg te schrijven

11 Inleiding Informatica Prof. Dr. O. De Troyer File f = new File(“gegevens.out”); FileOutputStream fs = new FileOutputStream(f) ; PrintStream pf = new PrintStream(fs) ; Of PrintStream pf = new PrintStream( new FileOutputStream( new File(“gegevens.out”) ) ) ; pf.print en pf.println vervangt de eventuele inhoud van het bestand door nieuwe inhoud!

12 Inleiding Informatica Prof. Dr. O. De Troyer Voorbeeld Schrijf zowel op het scherm als op een file import java.io.*; class Programma1 { public static void main(String[] arg) throws IOException { File backupFile; FileOutputStream backupFileStream ; PrintStream backup ; backupFile = new File(“backup”); backupFileStream = new FileOutputStream(backupFile); backup = new PrintStream(backupFileStream); System.out.println(“Dit is mijn eerste Java programma”); backup. println(“Dit is mijn eerste Java programma”); System.out.println(“maar niet mijn laatste.”); backup.println(“maar niet mijn laatste.”); } Voor het geval er iets verkeerd gaat. Bv. een bestand maken als je dat niet mag Voor het geval er iets verkeerd gaat. Bv. een bestand maken als je dat niet mag

13 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van een bestand (1) Om van een bestand te kunnen lezen is er ook een stream nodig Java Programma Java Programma Bestand op disk Bestand op disk Nu een FileInputStream nodig: –object van de klasse FileInputStream Constructor new FileInputStream(fileObject) File f = new File(“gegevens”); FileInputStream fs = new FileInputStream(f) ; data

14 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van een bestand (2) We willen nu de input stream zien als een opeenvolging van karakters –Object van de klasse InputStreamReader Java Programma Java Programma Bestand op disk Bestand op disk karacters hal lo File f = new File(“gegevens”); FileInputStream fs = new FileInputStream(f) ; InputStreamReader isr = new InputStreamReader(fs);

15 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van een bestand (3) Echter objecten van de klasse InputStreamReader erkennen het einde van een lijn niet. BufferedReader objecten kunnen dit wel File f = new File(“gegevens”); FileInputStream fs = new FileInputStream(f) ; InputStreamReader isr = new InputStreamReader(fs); BufferedReader br = new BufferedReader(isr); –Methode readLine om een lijn te lezen String s ; s = br.readLine() ;

16 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van een bestand (4) Overzicht –Maak File object om naar het bestand te refereren –Maak FileInputStream object om het kanaal naar het bestand te representeren –Maak InputStreamReader object om kanaal te zien als opeenvolging van karakters. –Maak BufferedReader object om opeenvolging van karakters te zien als opeenvolging van lijnen. –Gebruik de readLine methode om een lijn te lezen.

17 Inleiding Informatica Prof. Dr. O. De Troyer Invoer via het toetsenbord (1) Zoals het lezen van een bestand maar –i.p.v. een FileInputStream object gebruiken we –een BufferedInputStream object Voor het toetsenbord is dit een voorgedefinieerd object: System.in /* File f = new File(“gegevens”); nu geen file maar invoer via toetsenbord FileInputStream fs = new FileInputStream(f) ; niet nodig System.in is voorgedefinieerd */ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader keyb = new BufferedReader(isr); String s = keyb.readLine() ;

18 Inleiding Informatica Prof. Dr. O. De Troyer Belangrijke opmerking System.out is een PrintStream object –Kan direct gebruikt worden om strings op het scherm te schrijven System.in in een BufferedInputStream object –Kan niet direct gebruikt worden om strings te lezen BufferedReader object nog nodig!

19 Inleiding Informatica Prof. Dr. O. De Troyer Interactieve programma’s Programma’s die hun invoer (o.a.) via het toetsenbord krijgen en hun resultaten (o.a.) op het scherm zetten. Hoe weet de eind-gebruiker wanneer hij welke invoer moet intypen? –Prompts Vb: ”Voer nu je voornaam in”

20 Inleiding Informatica Prof. Dr. O. De Troyer Interactieve programma’s (2) Voorbeeld prompt System.out.println(“Voer nu je voornaam in”); naam = keyb.readLine() ; Echter! –Een PrintStream object verzamelt alle af te drukken strings in een buffer. –Strings worden pas afgedrukt als de buffer vol is of programma stopt. Prompt kan nog in de buffer zitten als readLine reeds uitgevoerd wordt! –Oplossing: methode flush() maakt de buffer leeg. System.out.println(“Voer nu je voornaam in”); System.out.flush(); naam = keyb.readLine() ;

21 Inleiding Informatica Prof. Dr. O. De Troyer Voorbeeld Maak een kopie van een bestand dat bestaat uit 2 lijnen. Voer de naam van het bestand in via het toetsenbord.

22 Inleiding Informatica Prof. Dr. O. De Troyer import java.io.*; class CopyFile { public static void main(String[] arg) throws IOException { // voor invoer via toetstenbord InputStreamReaderisrKeyboard; BufferedReader keyboard; isrKeyboard = new InputStreamReader(System.in); keyboard = new BufferedReader(isrKeyboard); // lees naam van bestand System.out.print(“geef naam van het te kopiëren bestand: “); System.out.flush(); String fnameOrig ; fnameOrig = keyboard.readLine(); // naam van kopie-bestand String fnameCopy ; fnameCopy = fnameOrig.concat(“.copy”);

23 Inleiding Informatica Prof. Dr. O. De Troyer // voor het lezen van het bestand File fOrig; FileInputStream fsOrig; InputStreamReader isrOrig; BufferedReaderbrOrig; fOrig = new File(fnameOrig); fsOrig = new FileInputStream(fOrig) ; isrOrig = new InputStreamReader(fsOrig); brOrig = new BufferedReader(isrOrig) ; // voor het wegschrijven op het bestand File fCopy; FileOutputStream fsCopy; PrintStreampsCopy; fCopy = new File(fnameCopy); fsCopy = new FileOutputStream(fCopy) ; psCopy = new PrintStream(fsCopy);

24 Inleiding Informatica Prof. Dr. O. De Troyer // lees lijn van origineel bestand en schrijf weg op kopie-bestand. // doe dit 2 keer String line; line = brOrig.readLine(); psCopy.println(line); line = brOrig.readLine(); psCopy.println(line); } }

25 Inleiding Informatica Prof. Dr. O. De Troyer Voorbeeld 2 Ontwerp klasse die het afhandelen van Interactive input en output eenvoudiger maakt: class InteractiveIO

26 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Bepaal het gedrag We willen het volgende gedrag –Schrijf een boodschap op het scherm (moet dadelijk zichtbaar zijn) –Vraag invoer via het toetsenbord via een prompt en lees de invoer (als string) –Nieuwe objecten maken zonder te moeten refereren naar System.in of System.out

27 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Bepaal de interface –Class name: InteractiveIO –Constructor: InteractiveIO() Vb: InteractiveIO interIO = new InteractiveIO();  public InteractiveIO() –Boodschap op het scherm schrijven: Vb: interIO.write(“Goed geantwoord!”);  public void write( String s) –Invoer lezen via prompt: Vb: string s ; s = interIO.promptAndRead(“Geef je voornaam: ”);  public String promptAndRead( String s)

28 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Een vb-programma Vraag invoer via de prompt “Please type a word:” en schrijf vervolgens deze invoer terug op het scherm import java.io.*; class TryInteractiveIO { public static void main(String[] arg) throws IOException { InteractiveIO interIO ; Stringline ; interIO = new InteractiveIO(); line = interIO.promptAndRead(“Please type a word: “); interIO.write(line); } }

29 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Klasse skelet class InteractiveIO { instantie variabelen indien nodig public InteractiveIO() { statements } // schrijf s naar het scherm public void write(String s) { statements } // schrijf s naar het scherm; // lees een string van het toetsenbord en geef deze als return-waarde terug public String promptAndRead(String s) { statements }

30 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Implementatie Methode write public void write(String s) { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s }

31 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Implementatie (2) De methode promptAndRead public String promptAndRead(String s) throws IOException { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s BufferedReaderbr; br = new BufferedReader( new InputStreamReader (System.in)); String line ; line = br.readLine(); return line ; }

32 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Implementatie (3) De constructor InteractiveIO() public InteractiveIO() { } Instantie variabelen ? –Geen nodig

33 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Verbeterde Implementatie public String promptAndRead(String s) { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s BufferedReaderbr; br = new BufferedReader( new InputStreamReader (System.in)); String line ; line = br.readLine(); return line ; } Telkens een nieuwe BufferReader en InputStreamReader! Beter: één keer nieuwe BufferReader en InputStreamReader maken – bij de constructor

34 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Verbeterde Implementatie (2) public String promptAndRead(String s) { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s BufferedReaderbr; String line ; line = br.readLine(); return line ; } public InteractiveIO() { } ? ? br = new BufferedReader( new InputStreamReader (System.in)); BufferReader br wordt instantie variabele

35 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Verbeterde Implementatie (3) private BufferedReader br ; public String promptAndRead(String s) throw IOException { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s String line ; line = br.readLine(); return line ; } public InteractiveIO() throw IOException { br = new BufferedReader( new InputStreamReader (System.in)); } return br.readLine();

36 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Verbeterde Implementatie (4) private BufferedReader br ; public InteractiveIO() throw IOException { br = new BufferedReader( new InputStreamReader (System.in)); } public String promptAndRead(String s) throw IOException { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s return br.readLine(); } public void write(String s) { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s } Methode van maken private void writeAndFlush(String s) { System.out.print(s) ; System.out.flush() ; } Methode van maken private void writeAndFlush(String s) { System.out.print(s) ; System.out.flush() ; }

37 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Verbeterde Implementatie (5) private BufferedReader br ; public InteractiveIO() throw IOException { br = new BufferedReader( new InputStreamReader (System.in)); } public String promptAndRead(String s) throw IOException { this.writeAndFlush(s); return br.readLine(); } public void write(String s) { this.writeAndFlush(s); } private void writeAndFlush(String s) { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s } this referentie naar het object zelf

38 Inleiding Informatica Prof. Dr. O. De Troyer InteractiveIO vb - Verbeterde Implementatie (6) private BufferedReader br ; public InteractiveIO() throw IOException { br = new BufferedReader( new InputStreamReader (System.in)); } public String promptAndRead(String s) throw IOException { this.writeAndFlush(s); return br.readLine(); } public void write(String s) { this.writeAndFlush(s); } private void writeAndFlush(String s) { System.out.print(s) ; System.out.flush() ;//voor het direct zichtbaar zijn van s } Is writeAndFlush echt nodig ? Voeg een methode writeln(String s) toe

39 Inleiding Informatica Prof. Dr. O. De Troyer int getallen lezen  Lees als String object String s = br.readLine() ;  Zet de String om naar een integer door methode uit envelope klasse Integer int i = Integer.parseInt(s) ; Note: string moet een geheel getal voorstellen anders krijgen we een fout Hello goed fout

40 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van float en double getallen Geen parseDouble en parseFloat methoden!  Lees als String object String s = br.readLine() ;  Zet de String om naar een Float of Double object door methode valueOf uit enveloppe klasse Float object = Float.valueOf(s) ;  Zet de Float of Double object om naar float of double door methode floatValue/doubleValue uit enveloppe klasse float f = object.floatValue() ;

41 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van een WWW-bestand Zoals het lezen van een bestand maar –i.p.v. een FileInputStream object gebruiken we –een FilterInputStream object WWW-bestanden worden geïdentificeerd door een URL (Universal Resource Locator) protocol://internet adres/bestandsnaam Vb: Voorgedefinieerde klasse URL

42 Inleiding Informatica Prof. Dr. O. De Troyer Lezen van een WWW-bestand (2) De klasse URL –Constructor: new URL(string) Vb: URL u = new URL(“http://www.yahoo.com/index.html”); –De methode openStream() maakt een FilterInputStream voor een URL object. Vb: FilterInputStream fis = u.openStream(); URL u = new URL(“http://www.yahoo.com/index.html”); FilterInputStream fis = u.openStream(); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String s = br.readLine() ;


Download ppt "Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 5: Bestanden."

Verwante presentaties


Ads door Google