ITK P 2 F 8 Strmmar och filhantering

  • Slides: 30
Download presentation
ITK: P 2 F 8 Strömmar och filhantering DSV Peter Mozelius

ITK: P 2 F 8 Strömmar och filhantering DSV Peter Mozelius

I/O = Input /Output ¡ Input = inmatning till en process från en fil,

I/O = Input /Output ¡ Input = inmatning till en process från en fil, ett tangentbord eller från en annan process ¡ ¡ Output = utmatning från en process till en fil, en skärm, en skrivare, eller till en annan process

Strömmar ¡ ¡ Oavsett typ av I/O så sker den i Java med hjälp

Strömmar ¡ ¡ Oavsett typ av I/O så sker den i Java med hjälp av strömmar En ström i Java är: l l l Ett flöde av data (binär eller som text) Ett objekt som hämtar data från en källa – inström Ett objekt som levererar data till en destination – utström Poängen är att data behandlas lika oavsett vad som är källa eller destination

Strömmar För att få tillgång till olika typer av strömmar i Java: import java.

Strömmar För att få tillgång till olika typer av strömmar i Java: import java. io. *; ¡ ¡ En djungel av strömtyper l l byte-strömmar char-strömmar

Byte-strömmar o o Dataflödet sker i form av bytes Har funnits i Java sedan

Byte-strömmar o o Dataflödet sker i form av bytes Har funnits i Java sedan JDK 1. 0 Den inbyggda datatypen byte 1 byte = 8 bitar Alla klasser i Java som hanterar byteströmmar har ett klassnamn där ordet Stream ingår

Char-strömmar o o Dataflödet sker i form av char Har funnits i Java sedan

Char-strömmar o o Dataflödet sker i form av char Har funnits i Java sedan JDK 1. 1 Den inbyggda datatypen char 1 char = 16 bitar Alla klasser i Java som hanterar charströmmar har ett klassnamn där ordet Reader eller Writer ingår

Två olika filtyper ¡ Alla filer lagras som 1: or och 0: or ¡

Två olika filtyper ¡ Alla filer lagras som 1: or och 0: or ¡ Binärfiler l l ¡ Läses just som en rad 1: or och 0: or Effektiv läsning för olika program Textfiler l l Läses som en rad av tecken Trevlig läsning för oss människor

Utström till fil 1 ¡ Öppna en 8 -bitars byte-ström File. Output. Stream fout

Utström till fil 1 ¡ Öppna en 8 -bitars byte-ström File. Output. Stream fout = new File. Output. Stream(”minfil. txt”); ¡ Buffrad utmatning genom Buffered. Output. Stream bout = new Buffered. Output. Stream(fout);

The Decorator Design Pattern Ett av många designmönster ¡ Ett enkelt designmönster där koden

The Decorator Design Pattern Ett av många designmönster ¡ Ett enkelt designmönster där koden från förra bilden kan skrivas om enligt: ¡ Buffered. Output. Stream bout = new Buffered. Output. Stream(new File. Output. Stream(”minfil. txt”));

The Decorator Design Pattern ¡ En File. Output. Stream kan dekoreras för kryptering enligt:

The Decorator Design Pattern ¡ En File. Output. Stream kan dekoreras för kryptering enligt: Object. Output. Stream ous = new Object. Output. Stream( new Cipher. Output. Stream( new File. Output. Stream(fil), cipher)); Poängen är att klasser inom samma familj kan kedjas ihop dynamiskt och ytterligare klasser inte behövs

Utström till fil 2 ¡ Öppna en 16 -bitars char-ström till en textfil och

Utström till fil 2 ¡ Öppna en 16 -bitars char-ström till en textfil och skriv med metoden println() lika enkelt som på P 1 med System. out. println(); Print. Writer pw = new Print. Writer( new File. Output. Stream(”minfil. txt”)); OCH SEDAN pw. print(); ELLER pw. println();

Print. Writer ¡ Klassen Print. Writer l Innehåller metoderna print() ¡ println() ¡ l

Print. Writer ¡ Klassen Print. Writer l Innehåller metoderna print() ¡ println() ¡ l ¡ Skriver ut med 16 bitar Vi ska titta på ett kodexempel MEN först 15 min PAUS!

Att skriva till fil, exempel 1 import java. io. *; public class F 8_exempel

Att skriva till fil, exempel 1 import java. io. *; public class F 8_exempel 1 { public static void main(String[] args) { Print. Writer pout = null; try { pout = new Print. Writer(new File. Output. Stream("min. fil")); }catch (File. Not. Found. Exception fnfe) { System. err. println("Angiven fil kunde inte öppnas. "); System. exit(0); }

Att skriva till fil, exempel 1 ¡ Om filen min. fil redan finns och

Att skriva till fil, exempel 1 ¡ Om filen min. fil redan finns och har ett innehåll så kommer innehållet att skrivas över Ibland är detta precis vad man vill ¡ Men ibland är det önskvärt att det tidigare innehållet ska finnas kvar ¡

Att skriva till fil, exempel 2 try{ pout = new Print. Writer(new File. Output.

Att skriva till fil, exempel 2 try{ pout = new Print. Writer(new File. Output. Stream("min. fil", true)); } catch (File. Not. Found. Exception fnfe) { System. err. println("Angiven fil kunde inte öppnas"); System. exit(0); } Det som skrivs läggs till sist i filen

Att skriva ut objekt Att dela upp komplexa objekt i sina beståndsdelar och skriva

Att skriva ut objekt Att dela upp komplexa objekt i sina beståndsdelar och skriva ut del för del till en fil kan kräva mycket kod ¡ I Java finns inbyggd serialisering ¡ Om en klass bara implementerar interfacet Serializable ¡ Så kan hela objektet istället skrivas ut på en gång med write. Object() ¡

Att skriva ut objekt ¡ Även en datasamling med ett antal objekt kan skrivas

Att skriva ut objekt ¡ Även en datasamling med ett antal objekt kan skrivas ut i sin helhet: Array. List al = new Array. List(); Lägg in en massa objekt; out. write. Object(al); Där out är en instans av klassen java. io. Object. Output. Stream

Att läsa in objekt ¡ Att sedan läsa in de utskrivna objekten igen görs

Att läsa in objekt ¡ Att sedan läsa in de utskrivna objekten igen görs genom: Object. Input. Stream oin = new Object. Input. Stream( new File. Input. Stream(fil)); OCH sedan oin. read. Object()

Klassen Object. Output. Stream ¡ Klassen Object. Outputstream har även en del andra instansmetoder

Klassen Object. Output. Stream ¡ Klassen Object. Outputstream har även en del andra instansmetoder för enklare utskrifter som t ex: public void write. Boolean(boolean b); write. Chars(String str); write. Float(float f); write. Double(double d);

Random. Access. File ¡ ¡ Den filåtkomst vi hittills tittat på har varit sekventiell

Random. Access. File ¡ ¡ Den filåtkomst vi hittills tittat på har varit sekventiell För vissa tillämpningar är det bättre med direktåtkomst (random access)

Random. Access. File raf = new Random. Access. File(”lager. fil”, ”rw”); Skapar en direktaccessfil

Random. Access. File raf = new Random. Access. File(”lager. fil”, ”rw”); Skapar en direktaccessfil som det går att både läsa och skriva till Flytta sedan inom filen med raf. seek(); 15 min PAUS!

En meny för filinläsning ¡ I program med grafiskt gränssnitt vill man ofta ha

En meny för filinläsning ¡ I program med grafiskt gränssnitt vill man ofta ha menyer i stil med

En meny för filinläsning ¡ Menyval kan som i kursbokens kap 14 skapas enligt:

En meny för filinläsning ¡ Menyval kan som i kursbokens kap 14 skapas enligt: public JMenu. Bar skapa. Arkiv. Meny() { fil. Bar = new JMenu. Bar(); arkiv. Meny = new JMenu("Arkiv"); arkiv. Meny. set. Mnemonic('a'); fil. Bar. add(arkiv. Meny);

En meny för filinläsning Menyerna behöver också lyssnas av Menu. Listener ml = new

En meny för filinläsning Menyerna behöver också lyssnas av Menu. Listener ml = new Menu. Listener(this, meddelande. Ruta, info. Ruta); m. Item = arkiv. Meny. add( new JMenu. Item("Öppna", 'ö')); m. Item. add. Action. Listener(ml); m. Item = arkiv. Meny. add( new JMenu. Item("Avsluta", 'a')); m. Item. add. Action. Listener(ml);

En meny för filinläsning Menylyssnaren är en egendefinierad klass som implementerar interfacet Action. Listener

En meny för filinläsning Menylyssnaren är en egendefinierad klass som implementerar interfacet Action. Listener class Menu. Listener implements Action. Listener { med vår gamle vän public void action. Performed( Action. Event e) {

En dialog för att välja fil JFile. Chooser fc = new Jfile. Chooser(); int

En dialog för att välja fil JFile. Chooser fc = new Jfile. Chooser(); int val = fc. show. Open. Dialog(fönster);

Användarens filval ¡ Att användaren verkligen har valt en fil och inte avbrutit dialogen

Användarens filval ¡ Att användaren verkligen har valt en fil och inte avbrutit dialogen kan kontrolleras genom: if(val == JFile. Chooser. APPROVE_OPTION) ¡ Sedan inleds filinläsningen med: Buffered. Reader in. Fil = null; try {

Att läsa in vald fil in. Fil = new Buffered. Reader(new File. Reader(jfc. get.

Att läsa in vald fil in. Fil = new Buffered. Reader(new File. Reader(jfc. get. Selected. File())); String rad; while((rad = in. Fil. read. Line())!= null) meddelande += "n" + rad; }catch(File. Not. Found. Exception fnfe){… }catch (IOException e){…}

Ett egendefinierat filfilter ¡ Det kan vara praktiskt att filtrera bort de filtyper som

Ett egendefinierat filfilter ¡ Det kan vara praktiskt att filtrera bort de filtyper som man INTE vill läsa in: private class In. Filter extends javax. swing. filechooser. File. Filter { public boolean accept(File f) { if(f. get. Name(). to. Lower. Case(). ends. With(". fil")) return true; else return false; }. . .

Er inlämningsuppgift ¡ Jobba nu på med: Tack för idag!

Er inlämningsuppgift ¡ Jobba nu på med: Tack för idag!