Hoofdstuk 5: Bestanden.

Slides:



Advertisements
Verwante presentaties
BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
Advertisements

Sudoku puzzels: hoe los je ze op en hoe maak je ze?
De elektronische verzamelaanvraag Ruben Fontaine Markt- en Inkomensbeheer – dienst Aangiftes.
‘SMS’ Studeren met Succes deel 1
28 juni 2009 Paëllanamiddag 1 Paëllanamiddag 28 juni 2009 Voorbereiding vrijdagavond (Loopt automatisch - 7 seconden)
Werkwoorden d t dt.
NEDERLANDS WOORD BEELD IN & IN Klik met de muis
Downloaden: Ad-aware. Downloaden bestaat uit 3 delen: •1. Zoeken naar de plek waar je het bestand kan vinden op het internet •2. Het nemen van een kopie.
BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
ZIEHIER 36 REDENEN WAAROM BIER
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
Weddeschalen & Weddebijslagen
Hoofdstuk 8: Recursie.
Ronde (Sport & Spel) Quiz Night !
Keuzeondersteunend model voor inbouwpakketten bij herbestemmingsprojecten Eindcolloquium Wiebrand Bunt.
Practica Computerlinguistiek Tekst en uitleg:
Van domeinklasse tot implementatie
Het ontwerpen van een klasse
Het type int Tekenen met Java operatoren
© BeSite B.V www.besite.nl Feit: In 2007 is 58% van de organisaties goed vindbaar op internet, terwijl in 2006 slechts 32% goed vindbaar.
Klassen en objecten.

Nooit meer onnodig groen? Luuk Misdom, IT&T
BZ voor de Klas 3 juni 2010.
Inleiding Informatica
Hoofdstuk 6: Controle structuren
Hoofdstuk 4: Klassen definiëren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Passie - Verrijzenis Arcabas
FOD VOLKSGEZONDHEID, VEILIGHEID VAN DE VOEDSELKETEN EN LEEFMILIEU 1 Kwaliteit en Patiëntveiligheid in de Belgische ziekenhuizen anno 2008 Rapportage over.
1 introductie 3'46” …………… normaal hart hond 1'41” ……..
Oefeningen F-toetsen ANOVA.
1. 2 De ontwikkeling van creatieve concepten t.b.v. mediacampagnes. Peter van Kessel Creatief Directeur, Headland Interactive.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
User management voor ondernemingen en organisaties
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
Algoritmiek Object-georiënteerd Programmeren
aanvallen moeten ten allen tijden worden weerstaan
6.1 Inleiding HOOFDSTUK 6 METHODEN
Hoofdstuk 3: Inleiding tot Java Applets
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Van Vensoc tot Biztax Vennootschapsbelasting Aj 2011.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
Fractale en Wavelet Beeldcompressie
Fractale en Wavelet Beeldcompressie
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
De financiële functie: Integrale bedrijfsanalyse©
Centrummaten en Boxplot
Even voorstellen : Groep 3b
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
12 sept 2013 Bodegraven 1. 2  vooraf lezen: 1Kor.7:12 t/m 24  indeling 1Korinthe 7  1 t/m 9: over het huwelijk  10 t/m 16: over echtscheiding  16.
13 november 2014 Bodegraven 1. 2 de vorige keer: 1Kor.15:29-34 indien er geen doden opgewekt worden...  vs 29: waarom dopen?  vs.30-32: waarom doodsgevaren.
ZijActief Koningslust
Hoofdstuk 6 – Objectgeoriënteerd Programmeren: Overerving
JAVA: een platformonafhankelijke taal
Programma zonder window commandline interface. Commandline programma public static void main (String [ ] params) { System. out. println (“Hoi allemaal!”);
Java Objectgeoriënteerd Programmeren in Java met BlueJ
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Python – For loop + strings
Transcript van de presentatie:

Hoofdstuk 5: Bestanden

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.

Bestand Bevat data (gegevens) Heeft een naam Een brief, een lijst van namen, een prijslijst van onderdelen, …. Heeft een naam Naamgeving kan onderworpen zijn aan regels Afhankelijk van het computer systeem

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”)

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

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);

Schrijven op een bestand (1) Om op een bestand te kunnen schrijven is een “stream” (soort kanaal) nodig Een opeenvolging van data eenheden Stream Java Programma Bestand op disk data Deze streams zijn objecten van de klasse FileOutputStream

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.

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”);

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

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!

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

Lezen van een bestand (1) Om van een bestand te kunnen lezen is er ook een stream nodig Java Programma Bestand op disk data Nu een FileInputStream nodig: object van de klasse FileInputStream Constructor new FileInputStream(fileObject) File f = new File(“gegevens”); FileInputStream fs = new FileInputStream(f) ;

Lezen van een bestand (2) We willen nu de input stream zien als een opeenvolging van karakters Object van de klasse InputStreamReader Java Programma Bestand op disk karacters h a l o File f = new File(“gegevens”); FileInputStream fs = new FileInputStream(f) ; InputStreamReader isr = new InputStreamReader(fs);

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() ;

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.

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() ;

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!

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”

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.flush();

Voorbeeld Maak een kopie van een bestand dat bestaat uit 2 lijnen. Voer de naam van het bestand in via het toetsenbord.

import java.io.*; class CopyFile { public static void main(String[] arg) throws IOException { // voor invoer via toetstenbord InputStreamReader isrKeyboard; 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”);

// voor het lezen van het bestand File fOrig; FileInputStream fsOrig; InputStreamReader isrOrig; BufferedReader brOrig; 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; PrintStream psCopy; fCopy = new File(fnameCopy); fsCopy = new FileOutputStream(fCopy) ; psCopy = new PrintStream(fsCopy);

// lees lijn van origineel bestand en schrijf weg op kopie-bestand. // doe dit 2 keer String line; line = brOrig.readLine(); psCopy.println(line); }

Voorbeeld 2 Ontwerp klasse die het afhandelen van Interactive input en output eenvoudiger maakt: class InteractiveIO

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

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)

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 ; String line ; interIO = new InteractiveIO(); line = interIO.promptAndRead(“Please type a word: “); interIO.write(line); }

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

InteractiveIO vb - Implementatie Methode write public void write(String s) { System.out.print(s) ; System.out.flush() ; //voor het direct zichtbaar zijn van s }

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 BufferedReader br; br = new BufferedReader( new InputStreamReader (System.in)); String line ; line = br.readLine(); return line ; }

InteractiveIO vb - Implementatie (3) De constructor InteractiveIO() public InteractiveIO() { } Instantie variabelen ? Geen nodig

InteractiveIO vb - Verbeterde Implementatie public String promptAndRead(String s) { System.out.print(s) ; System.out.flush() ; //voor het direct zichtbaar zijn van s BufferedReader br; 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

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

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();

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.flush() ; //voor het direct zichtbaar zijn van s Methode van maken private void writeAndFlush(String s) { System.out.print(s) ; System.out.flush() ; }

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) { 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

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) { 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

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 2 -77 Hello 57 88 goed fout

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() ;

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: http://www.yahoo.com/index.html Voorgedefinieerde klasse URL

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() ;