Presentation laddar. Vänta.

Presentation laddar. Vänta.

ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.

Liknande presentationer


En presentation över ämnet: "ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius."— Presentationens avskrift:

1 ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius

2 I/O  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

3 Strömmar  Oavsett typ av I/O så sker den i Java med hjälp av strömmar  En ström i Java är: 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

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

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

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

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

8 Utström till fil 1  Öppna en 8-bitars byte-ström FileOutputStream fout = new FileOutputStream(”minfil.txt”);  Buffrad utmatning genom BufferedOutputStream bout = new BufferedOutputStream(fout);

9 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: BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(”minfil.txt”));

10 The Decorator Design Pattern  En FileOutputStream kan dekoreras för kryptering enligt: ObjectOutputStream ous = new ObjectOutputStream( new CipherOutputStream( new FileOutputStream(fil), cipher)); Poängen är att klasser inom samma familj kan kedjas ihop dynamiskt och ytterligare klasser inte behövs

11 Utström till fil 2  Öppna en 16-bitars char-ström till en textfil och skriv med metoden println() lika enkelt som på P1 med System.out.println(); PrintWriter pw = new PrintWriter( new FileOutputStream(”minfil.txt”)); OCH SEDAN pw.print(); ELLER pw.println();

12 PrintWriter  Klassen PrintWriter Innehåller metoderna  print()  println() Skriver ut med 16 bitar  Vi ska titta på ett kodexempel MEN först 15 min PAUS!

13 Att skriva till fil, exempel1 import java.io.*; public class F8_exempel1 { public static void main(String[] args) { PrintWriter pout = null; try { pout = new PrintWriter(new FileOutputStream("min.fil")); }catch (FileNotFoundException fnfe) { System.err.println("Angiven fil kunde inte öppnas."); System.exit(0); }

14 Att skriva till fil, exempel1  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

15 Att skriva till fil, exempel2 try{ pout = new PrintWriter(new FileOutputStream("min.fil", true)); } catch (FileNotFoundException fnfe) { System.err.println("Angiven fil kunde inte öppnas"); System.exit(0); } Det som skrivs läggs till sist i filen

16 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 writeObject()

17 Att skriva ut objekt  Även en datasamling med ett antal objekt kan skrivas ut i sin helhet: ArrayList al = new ArrayList(); Lägg in en massa objekt; out.writeObject(al); Där out är en instans av klassen java.io.ObjectOutputStream

18 Att läsa in objekt  Att sedan läsa in de utskrivna objekten igen görs genom: ObjectInputStream oin = new ObjectInputStream( new FileInputStream(fil)); OCH sedan oin.readObject()

19 Klassen ObjectOutputStream  Klassen ObjectOutputstream har även en del andra instansmetoder för enklare utskrifter som t ex: public void writeBoolean(boolean b); public void writeChars(String str); public void writeFloat(float f); public void writeDouble(double d);

20 RandomAccessFile  Den filåtkomst vi hittills tittat på har varit sekventiell  För vissa tillämpningar är det bättre med direktåtkomst (random access)

21 RandomAccessFile RandomAccessFile raf = new RandomAccessFile(”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!

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

23 En meny för filinläsning  Menyval kan som i kursbokens kap 14 skapas enligt: public JMenuBar skapaArkivMeny() { filBar = new JMenuBar(); arkivMeny = new JMenu("Arkiv"); arkivMeny.setMnemonic('a'); filBar.add(arkivMeny);

24 En meny för filinläsning Menyerna behöver också lyssnas av MenuListener ml = new MenuListener(this, meddelandeRuta, infoRuta); mItem = arkivMeny.add( new JMenuItem("Öppna", 'ö')); mItem.addActionListener(ml); mItem = arkivMeny.add( new JMenuItem("Avsluta", 'a')); mItem.addActionListener(ml);

25 En meny för filinläsning Menylyssnaren är en egendefinierad klass som implementerar interfacet ActionListener class MenuListener implements ActionListener { med vår gamle vän public void actionPerformed( ActionEvent e) {

26 En dialog för att välja fil JFileChooser fc = new JfileChooser(); int val = fc.showOpenDialog(fönster);

27 Användarens filval  Att användaren verkligen har valt en fil och inte avbrutit dialogen kan kontrolleras genom: if(val == JFileChooser.APPROVE_OPTION)  Sedan inleds filinläsningen med: BufferedReader inFil = null; try {

28 Att läsa in vald fil inFil = new BufferedReader(new FileReader(jfc.getSelectedFile())); String rad; while((rad = inFil.readLine())!= null) meddelande += "\n" + rad; }catch(FileNotFoundException fnfe){… }catch (IOException e){…}

29 Ett egendefinierat filfilter  Det kan vara praktiskt att filtrera bort de filtyper som man INTE vill läsa in: private class InFilter extends javax.swing.filechooser.FileFilter { public boolean accept(File f) { if(f.getName().toLowerCase().endsWith(".fil")) return true; else return false; }...

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


Ladda ner ppt "ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius."

Liknande presentationer


Google-annonser