Java IO Introduktion 1 Introduktion Input och output
- Slides: 122
Java I/O Introduktion 1
Introduktion • Input och output – Applikationer läser in data (input) – Applikationer skriver data (output) • Data – – Förflyttas mellan olika källor eller system Överförs och behandlas som olika grundläggande typer Representerar information Kan transformeras i olika steg 2
Introduktion • Informationskällor – En fil (i minnet, på hårddisk, på diskett) – En resurs i ett nätverk (nätverkskoppling, databasserver) – En datatyp i minnet (primitiv, objekt) • Typer av data vid överföring – Bytes – Text (characters) • Bytes utgör binära data och representerar – – Primitiva datatyper eller objekt Ljud Bilder och film Text med begränsade teckenuppsättningar 3
Introduktion • Överföring och transformering – Obuffrat eller buffrat – Klartext eller kryptering – Okomprimerat eller komprimerat • Teckenuppsättningar – – – ASCII-7 ASCII-8 ISO 8859 -1 (Latin 1) UTF-8 Unicode • Plattformsberoende tecken – Radbrytning, separationstecken i sökvägar m. m. 4
Introduktion Input och output i Java • Bygger på konceptet strömmar • Generella algoritmer för sekventiell läsning och skrivning Läsning Skrivning Öppna en ström Så länge mer information finns, läs från strömmen Så länge mer information finns, skriv till strömmen Stäng strömmen 5
Introduktion Indelning av strömmar • En ström är antingen – Byte-orienterad (byteströmmar) – Tecken-orienterad (teckenströmmar) • En ström har en riktning – Läsning (inströmmar) – Skrivning (utströmmar) 6
Introduktion Indelning av strömmar • Inströmmar – Ett program ska hämta/läsa information – En ström öppnas över/mot en informationskälla – Data läses sekventiellt 7
Introduktion Indelning av strömmar • Utströmmar – Ett program ska sända/skriva information – En ström öppnas över/mot en informationskälla – Data läses sekventiellt 8
Introduktion Indelning av strömmar • Grundläggande strömmar – Gör grovjobbet – Kalls ibland fundamentala eller underliggande • Filter – – Opererar på en underliggande ström Kan transformera data under läsning och skrivning Kan utöka med fler specifika metoder Vissa teckenströmmar kan också sägas höra hit 9
Introduktion Användning av strömmar • Allmänt gäller att – – En ström öppnas implicit när den skapas Metoder för att läsa Metoder för att skriva En ström bör stängas explicit • För vissa strömmar gäller att – De explicit måste tömmas vid skrivning 10
Introduktion Användning av strömmar • Ihopkoppling – – Strömmar kombineras till önskat resultat Först finns en grundläggande ström Därefter kopplas en filterström ovanpå denna Därefter kopplas en till … och kanske en till … o s v 11
Introduktion API • Grundläggande klasser finns i paketet java. io • Andra klasser finner man exempelvis i java. util. zip javax. crypto • Ett mer avancerat API finns i java. nio – samt olika underpaket till detta 12
Introduktion API • Två klasshierarkier • Baseras på den typ av data de opererar på – Teckenströmmar opererar på text – Byteströmmar opererar på bytes 13
Introduktion API • Hierarkierna speglar varandra • Abstrakta superklasser – Fundamentala metoder • Konkreta subklasser – Ärver och/eller överlagrar metoder – Utökar med fler metoder 14
Introduktion API • Polymorfism • Subklasser ”speglar” superklasser • Superklasser används polymorft genom subklasserna • Detaljer göms och abstraheras bort • Ibland är man omedveten om typen av ström • Enkel användning 15
Java I/O Byteströmmar 16
Byteströmmar • Läser och skriver bytes • I java är varje byte 8 bitar • Används i regel för binära data – Bilder – Ljud • Kan användas för text men – Kräver att programmeraren skriver tolkande kod – Begränsade till teckenuppsättningen ISO-Latin 1 17
Byteströmmar Inströmmar • Abstrakta superklassen java. io. Input. Stream • Konkreta subklasser – Läser från någon form av databank – Utför filterfunktioner (processande 18
Byteströmmar Inströmmar • Partiell hierarki Sequence. Input. Stream Data. Input. Stream Object. Input. Stream Buffered. Input. Stream Filter. Input. Stream Byte. Array. Input. Stream File. Input. Stream Pushback. Input. Stream Cipher. Input. Stream ZIPInput. Stream Piped. Input. Stream Superklass Filterström Databankström 19
Byteströmmar Grundläggande inströmmar Input. Stream • Fundamentala metoder för att läsa – Råa bytes – Arrayer av råa bytes public abstract int read() throws IOException public int read(byte[] input, int offset, int length) throws IOException public long skip(long n) throws IOException public int available() throws IOException public void close() throws IOException 20
Byteströmmar Grundläggande inströmmar • Tillhandahåller dessutom metoder för – Markering av en position i strömmen – Hoppa över input – Återställa den aktuella positionen i strömmen • Vissa inströmmar stödjer alltid detta – Buffered. Input. Stream – Byte. Array. Input. Stream • Övriga måste kedjas till en buffrad ström först! 21
Byteströmmar Grundläggande inströmmar read() – Läsa en byte i taget är ofta ineffektivt i nätverk – Exempelvis genererar varje TCP segment minst 40 bytes overhead i form av routing och felkorrigering – Att läsa 1 kb, 1 byte i taget, medför då totalt ca 40 kb read(byte[] input) read(byte[] input, int offset, int length) – – En enskild läsning av många bytes är oftast mer effektiv Ackumulerar bytes i en buffert Läser först när ett visst antal ackumulerats Att buffra 1 kb före läsning innebär totalt ca 1 kb + 40 b 22
Byteströmmar Grundläggande inströmmar • Övriga grundläggande inströmmar – Använder samma metoder – Läser från olika media – Byte. Array. Input. Stream läser data till en array av bytes – File. Input. Stream läser data från en binär fil – Piped. Input. Stream trådning av en inström och en utström – Telnet. Input. Stream läser data från en nätverkskoppling 23
Byteströmmar Filtrerande inströmmar • Utökar funktionalitet – – – Filter. Input. Stream superklass för Data. Input. Stream konverterar till primitiva datatyper Buffered. Input. Stream buffrar data under läsning Pushback. Input. Stream trycka tillbaka, inspektera, ångra Cipher. Input. Stream dekrypterar data under läsning ZIPInput. Stream packar upp komprimerade data under läsning – Sequence. Input. Stream logisk sammanslagning av inströmmar – Object. Input. Stream läser in bytes som ett objekt 24
Byteströmmar Utströmmar • Abstrakta superklassen java. io. Output. Stream • Konkreta subklasser – Utför filterfunktioner (processande) – Skriver till någon form av databank – Utför specialfunktioner som hantering av objekt 25
Byteströmmar Utströmmar • Partiell hierarki Data. Output. Stream Object. Output. Stream Buffered. Output. Stream Filter. Output. Stream Byte. Array. Output. Stream File. Output. Stream Print. Stream Cipher. Output. Stream ZIPOutput. Stream Piped. Output. Stream Superklass Filterström Databankström 26
Byteströmmar Grundläggande utströmmar Output. Stream • Fundamentala metoder för att skriva – Råa bytes – Arrayer av råa bytes public abstract void write(int b) throws IOException public void write(byte[] data, int offset, int length) throws IOException public void flush() throws IOException public void close() throws IOException 27
Byteströmmar Grundläggande utströmmar write(int b) – Lika ineffektivt att skriva som att läsa en byte i taget – De buffrande metoderna kan därför användas write(byte[] data) write(byte[] data, int offset, int length) 28
Byteströmmar Grundläggande utströmmar • Övriga grundläggande utströmmar – Använder samma metoder – Skriver till olika media – File. Output. Stream skriver data till en binär fil – Byte. Array. Output. Stream läser data till en utökningsbar array – Piped. Output. Stream trådning av en utström och en inström – Telnet. Output. Stream skriver data till en nätverkskoppling 29
Byteströmmar Filtrerande utströmmar • Utökar funktionalitet – – – Filter. Output. Stream superklass för Data. Output. Stream skriver primitiva datatyper Buffered. Output. Stream buffrar data under skrivning Cipher. Output. Stream krypterar data under skrivning ZIPOutput. Stream komprimerar data under skrivning – Object. Output. Stream skriver ut ett objekt som bytes 30
Byteströmmar • Vissa klasser gör grovjobbet • Andra utökar funktionalitet • Men endast råa bytes hanteras • Vad innebär dessa bytes? – – – Bilder, ljud, video, objekt, text Upp till programmeraren att avgöra Ofta är det intuitivt Andra gånger krävs kod som tolkar dessa bytes Lyckligtvis finns andra alternativ för text 31
Java I/O Teckenströmmar 32
Teckenströmmar • Kallas ibland läsare (readers) och skrivare (writers) • Opererar på text/tecken (characters) • Kopplas ibland ihop med byte-orienterade strömmar – Utgör då en speciell form av filter – Konverterar mellan bytes och tecken 33
Teckenströmmar • Bygger på teckenuppsättningen Unicode • Varje tecken utgör två bytes, eller 16 bitar • Godtyckliga tecken kan därför representeras • Kan därför hantera godtyckliga textformat – ASCII-7 – ASCII-8 – Latin-1 – UTF-8 34
Teckenströmmar Inströmmar • Abstrakta superklassen java. io. Reader • Konkreta subklasser – Läser från någon form av databank – Utför filterfunktioner (processande) 35
Teckenströmmar Inströmmar • Partiell hierarki Buffered. Reader Line. Number. Reader Char. Array. Reader Input. Stream. Reader File. Reader Filter. Reader Pushback. Reader Piped. Reader String. Reader Superklass Filterström Databankström 36
Teckenströmmar Grundläggande inströmmar Reader • Speglar Input. Stream • Fundamentala metoder för att läsa – Tecken (char) – Arrayer av tecken public abstract int read(char[] text, int offset, int length) throws IOException public int read(char[] text) throws IOException public long skip(long n) throws IOException public void close() throws IOException 37
Teckenströmmar Grundläggande inströmmar • Tillhandahåller dessutom metoder för – Markering av en position i strömmen – Hoppa över input – Återställa den aktuella positionen i strömmen • Vissa inströmmar stödjer alltid detta • Övriga måste kedjas till en buffrad ström först! 38
Teckenströmmar Grundläggande inströmmar read() – Kan ibland vara ineffektivt att läsa ett tecken i taget – De buffrande metoderna kan därför användas read(char[] text) read(char[] text, int offset, int length) 39
Teckenströmmar Grundläggande inströmmar • Övriga grundläggande inströmmar – Använder samma metoder – Läser från olika media – – Char. Array. Reader läser tecken från en array File. Reader läser textfiler Piped. Reader som motsvarande byteström fast för tecken String. Reader läser från en sträng 40
Teckenströmmar Filtrerande inströmmar • Utökar funktionalitet – Input. Stream. Reader konverterar bytes till tecken – Buffered. Reader buffrar data under läsning – Line. Buffered. Reader håller reda på radnummer – Filter. Reader superklass för vissa typer av filter – Pushback. Reader trycka tillbaka, inspektera, ångra 41
Teckenströmmar Utströmmar • Abstrakta superklassen java. io. Writer • Konkreta subklasser – Skriver till någon form av databank – Utför filterfunktioner (processande) 42
Teckenströmmar Utströmmar • Partiell hierarki Buffered. Writer Char. Array. Writer Output. Stream. Reader Writer File. Writer Filter. Writer Piped. Writer String. Writer Print. Writer Superklass Filterström Databankström 43
Teckenströmmar Grundläggande utströmmar Writer • Speglar Output. Stream • Fundamentala metoder för att skriva – Tecken (char) – Arrayer av tecken public abstract void write(char[] text, int offset, int length) throws IOException public void read(char[] text) throws IOException public abstract void flush() throws IOException public abstract void close() throws IOException 44
Teckenströmmar Grundläggande utströmmar write() – Kan ibland vara ineffektivt att skriva ett tecken i taget – De buffrande metoderna kan därför användas write(char[] text) write(char[] text, int offset, int length) 45
Teckenströmmar Grundläggande utströmmar • Övriga grundläggande utströmmar – Använder samma metoder – Skriver till olika media – – Char. Array. Writer skriver tecken till en utökningsbar array File. Writer skriver till textfiler Piped. Writer som motsvarande byteström fast för tecken String. Writer skriver till en sträng 46
Teckenströmmar Filtrerande inströmmar • Utökar funktionalitet – Output. Stream. Reader konverterar tecken till bytes – Buffered. Writer buffrar data under skrivning – Filter. Writer superklass för vissa typer av filter – Print. Writer skriver textrepresenationer av olika objekt 47
Java I/O Användning 48
Användning Byteströmmar • Partiell hierarki Sequence. Input. Stream Data. Input. Stream Object. Input. Stream Buffered. Input. Stream Filter. Input. Stream Byte. Array. Input. Stream File. Input. Stream Pushback. Input. Stream Cipher. Input. Stream ZIPInput. Stream Piped. Input. Stream Superklass Filterström Databankström 49
Användning Byteströmmar • Partiell hierarki Data. Output. Stream Object. Output. Stream Buffered. Output. Stream Filter. Output. Stream Byte. Array. Output. Stream File. Output. Stream Print. Stream Cipher. Output. Stream ZIPOutput. Stream Piped. Output. Stream Superklass Filterström Databankström 50
Användning Teckenströmmar • Partiell hierarki Buffered. Reader Line. Number. Reader Char. Array. Reader Input. Stream. Reader File. Reader Filter. Reader Pushback. Reader Piped. Reader String. Reader Superklass Filterström Databankström 51
Användning Teckenströmmar • Partiell hierarki Buffered. Writer Char. Array. Writer Output. Stream. Reader Writer File. Writer Filter. Writer Piped. Writer String. Writer Print. Writer Superklass Filterström Databankström 52
Användning • I/O kan vara tidsödande • Speciellt i nätverk • Stora filer? • Lämpligt att tråda I/O-operationer 53
Användning Grundläggande strömmar • Underliggande strömmar • Läser direkt från källan • Första länken i en kedja 54
Användning Filter • Kopplas ihop med andra strömmar – – Opererar ovanpå andra strömmar Bildar olika lager Kan transformera data under läsning och skrivning Kan utöka med fler specifika metoder • Olika typer – Bytefilter – Teckenfilter 55
Användning Bytefilter • Arbetar med råa bytes • Utför någon form av bearbetning – Kompression/uppackning – Kryptering/dekryptering • Kopplas ihop med – En grundläggande byteström – Andra bytefilter 56
Användning Teckenfilter • Konverterar mellan bytes och tecken • Arbetar med text (characters) • Hanterar en mängd olika teckenuppsättningar • Kopplas ihop med – – En grundläggande byteström En grundläggande teckenström Bytefilter Andra teckenfilter 57
Användning Vad vill vi uppnå? • • Vilken typ av data? Vilken riktning? Vilken källa? Vilka filter? 58
Användning Skapa • Importera java. io. *; • Skapa en grundläggande ström – Sker genom konstruktorn – Sker genom anrop till andra klasser new • Öppna strömmen – Behövs inte, öppnas vid skapande • Koppla ihop med olika filter – Kedjning 59
Användning Kedjning • Strömmar organiseras till en kedja • Kopplingen sker genom konstruktorerna • Varje ström utgör en länk i en kedja • Varje länk i kedjan – Erhåller data från föregående länk – Utför någon funktion – Skickar behandlade data till nästa länk • Man använder sista länken i kedjan • Detaljer om processen kan ofta ignoreras 60
Användning Kedjning • Metaforer – Linnestugan – Tvättstugan • Sekventiell ihopkoppling • Parallella processer 61
Användning Använd strömmen • Obuffrade data – En byte/ett tecken i taget – En array av bytes/tecken i taget – Direkt till underliggande ström • Buffrade data – En buffert med bytes/tecken – Vid skrivning måste bufferten tömmas! – Först då skickas data till underliggande ström • Stäng strömmen flush() close() 62
Användning Kedjning • Exempel – – – – En komprimerad, krypterad textfil ankommer från ett lokalt nätverkskort Det presenteras för en underliggande ström En annan ström buffrar data för att snabba upp hela processen En särskild ström dekrypterar data Ytterligare en ström packar upp komprimerade data Konverterar av data till text Texten läses in till applikationen och processas 63
Användning Kedjning Buffrad text Tecken Input. Stream. Reader Buffrad data ZIPInput. Stream Buffrad, komrimerad data Cipher. Input. Stream Buffrad, komrimerad, krypterad data Bytes Buffered. Input. Stream Rå komrimerad, krypterad data Telnet. Input. Stream Rå komrimerad, krypterad data Nätverk 64
Användning Kedjning • Teknik 1 – Behålla referenserna till varje ström File. Input. Stream fis = new File. Input. Stream(”data. txt”); Buffered. Input. Stream bis = new Buffered. Input. Stream(fis); • Svagheter – Det är nu möjligt att använda read() hos båda strömmarna för att läsa data från data. txt – Men, blandade anrop till olika strömmar anslutna/kopplade till samma källa kan bryta olika implicita kontrakt hos strömmarna. – Därför, använd endast det sista filtret i kedjan för att läsa och skriva ifrån! 65
Användning Kedjning • Teknik 2 – Explicit skriva kod som omöjliggör att bryta kontrakten – Medvetet tappa referensen till den underliggande strömmen – Då kan vi inte oavsiktligt korrumpera bufferten Input. Stream in = new File. Input. Stream(”data. txt”); in = new Buffered. Input. Stream(in); • Svagheter – Det fungerar därför att det inte är nödvändigt att skilja mellan metoderna hos Input. Stream och Buffered. Input. Stream – Men om vis skulle vilja utnyttja utökade metoder? – Vi kan just nu bara använda metoder hos Input. Stream 66
Användning Kedjning • Teknik 3 – Konstruera en ström direkt innanför en annan – Ett kedjeanrop via konstruktorerna Buffered. Input. Stream bis = new Buffered. Input. Stream( new File. Input. Stream(”data. txt”)); • Denna teknik – Vi kan inte av misstag läsa från File. Input. Stream – Vi kan använda alla metoder hos Buffered. Input. Stream – Bör användas! 67
Java I/O Exempel 68
Binära data Skriva data till fil • Vi vill skriva 5 nummer till en binär fil – Vilka strömmar behöver vi? En byteström som skriver till en fil En byteström som skriver primitiva datatyper • Hur ska dessa kopplas ihop? Data. Output. Stream File. Output. Stream fil 1 2 3 4 5 69
Binära data Skriva data till fil • Skriva 5 nummer till en existerande binär fil try { final int NO_OF_ITEMS = 5; Data. Output. Stream dos = new Data. Output. Stream( new File. Output. Stream(”file. dat”)); dos. write. Int(NO_OF_ITEMS); //indikerar antal skrivna for (int i = 1; i <= NO_OF_ITEMS; i++) { dos. write. Int(i); } dos. flush(); dos. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 70
Binära data Läsa data från fil • Vi vill nu läsa in data från vår fil – Vilka strömmar behöver vi? En byteström som läser från en fil En byteström som tolkar primitiva datatyper • Hur ska dessa kopplas ihop? Data. Input. Stream File. Input. Stream fil 1 2 3 4 5 71
Binära data Läsa data från fil • Läsa in numren från vår binära fil try { Data. Input. Stream dis = new Data. Input. Stream( new File. Input. Stream(”file. dat”)); int items = dis. read. Int(); //indikerar antal skrivna for (int i = 1; i <= items; i++) { int n = dis. read. Int(); System. out. print(n + ” ”); } System. out. println(); dis. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 72
Binära data • Resultat 1 2 3 4 5 • För att lägga till data till existerande fil Data. Output. Stream dis = new Data. Output. Stream( new File. Output. Stream(”file. dat”, true)); 73
Text Skriva text till fil, exempel 1 • Skriva 5 nummer till en existerande textfil final int NO_OF_ITEMS = 5; Print. Writer pw = new Print. Writer( new File. Output. Stream(”file. txt”)); for (int i = 1; i <= NO_OF_ITEMS; i++) { pw. print(” ”); pw. print(i); } pw. flush(); pw. close(); 74
Text Läsa text från fil, exempel 1 • Läsa in numren från vår textfil try { Buffered. Input. Stream bis = new Buffered. Input. Stream( new File. Input. Stream(”file. txt”)); int c = bis. read(); while (c != -1) { System. out. print((char) c); //explicit typomvandling c = bis. read(); } System. out. println(); bis. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 75
Text • Resultat 1 2 3 4 5 • För att lägga till data till existerande fil Print. Writer pw = new Print. Writer( new File. Output. Stream(”file. txt”, true)); 76
Text Skriva text till fil, exempel 2 • Skriva 5 nummer till en existerande textfil final int NO_OF_ITEMS = 5; Print. Writer pw = new Print. Writer( new Buffered. Writer( new File. Writer(”file. txt”))); for (int i = 1; i <= NO_OF_ITEMS; i++) { pw. print(” ”); pw. print(i); } pw. flush(); pw. close(); 77
Text Läsa text från fil, exempel 2 • Läsa in numren från vår textfil try { Buffered. Reader br = new Buffered. Reader( new File. Reader(”file. txt”)); String line = br. read. Line(); String text = ””; while (line != null) { text += line; line = br. read. Line(); } br. close(); System. out. println(text); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 78
Text Skriva binära data till fil, exempel 3 • Vi återanvänder exemplet för binära filer • Visar att vi kan konvertera dessa till text – Vilka strömmar behöver vi? En byteström som skriver till en fil En byteström som skriver primitiva datatyper • Hur ska dessa kopplas ihop? Data. Output. Stream File. Output. Stream fil int i = 42; 79
Text Skriva binära data till fil, exempel 3 • Skriva 5 nummer till en existerande binär fil try { final int NO_OF_ITEMS = 5; Data. Output. Stream dos = new Data. Output. Stream( new File. Output. Stream(”file. dat”)); dos. write. Int(NO_OF_ITEMS); //indikerar antal skrivna for (int i = 1; i <= NO_OF_ITEMS; i++) { dos. write. Int(i); } dos. flush(); dos. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 80
Text Konvertera data, exempel 3 • Vi vill nu läsa in data från vår fil och konvertera till tecken – Vilka strömmar behöver vi? En byteström som läser från en fil En byteström som konverterar från bytes till tecken En byteström som buffrar • Hur ska dessa kopplas ihop? fil Buffered. Reader int i = 42; Input. Stream. Reader File. Input. Stream 81
Text Konvertera data, exempel 3 • Läsa in från binär fil och konvertera till text try { Buffered. Reader br = new Buffered. Reader( new Input. Stream. Reader( new File. Input. Stream(”file. dat”))); String line = br. read. Line(); String text = ””; while (line != null) { text += line; line = br. read. Line(); } br. close(); System. out. println(text); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 82
Standardströmmar • System. out • System. err • System. in • java. io. File. Descriptor – Har egenskaper som representerar dessa strömmar 83
Standardströmmar Skriva till en standardström • Skriva text till out try { Print. Writer pw = new Print. Writer( new File. Output. Stream(File. Descriptor. out)); pw. print(”Skriver en sträng: ” + ”text”); pw. print(”Skriver ett tal: ” + 42); pw. print(”Skriver ett flyttal: ” + 3. 14 f); pw. flush(); pw. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 84
Standardströmmar • Resultat Skriver en text: text Skriver ett tal: 42 Skriver ett flyttal: 3. 14 85
Java I/O Filer och andra objekt 86
Filobjektet java. io. File • En abstrakt representation av – En fil – En katalog • Användargränssnitt och operativsystem använder systemberoende sökvägar till filnamn och kataloger • File utgör en systemoberoende abstrakt vy av hierarkiska sökvägar 87
Filobjektet • En abstrakt sökväg har två komponenter • Ett möjligt systemberoende prefix – – Kan innehålla ett namn på en enhet ”/” för en katalog i UNIX, eller ”” för en katalog i Microsoft Windows, eller \” för en UNC-sökväg i Microsoft Windows File. path. Separator • En sekvens av inga eller flera namn – Varje namn, förutom det sista, indikerar en katalog – Sista namnet kan utgöra en katalog eller fil C: Mina dokumentJavaprojektfilhanteringdata. txt 88
Filobjektet • Konvertering från en abstrakt till fysisk sökväg – Systemberoende – Varje namn separeras med ett tecken – Tecknet utgör plattformens default-separator (”/”, ”” etc. ) File. separator 89
Filobjektet • En sökväg kan vara absolut eller relativ • En absolut sökväg är komplett C: Mina dokumentJavaprojektfilhanteringdata. txt • En relativ sökväg – Tolkas i sammanhanget av en annan sökväg – Klasser i java. io översätter relativa sökvägar mot användarens nuvarande katalog – Utgörs oftast av katalogen från vilken Javas virtuella maskin startats. . data. txt 90
Filobjektet • Skapa en fil med absolut sökväg File f = new File(”C: \Mina dokument\ Javaprojekt\filhantering\data. txt”); • Skapa en fil med relativ sökväg, default-katalogen File f = new File(”data 2. txt”); • Skapa en fil med relativ sökväg, annan katalog String sep = File. separator; String file. Name = ”data 2. txt”; File f = new File(”. . ” + sep + file. Name); 91
Filobjektet • Radera en befintlig fil File f = new File(”data 2. txt”); f. delete(); • Modifiera filen? – Immutable – Får göra detta via strömmar istället! 92
Properties • • java. util. Properties Representerar en persistent mängd av egenskaper Kan sparas till/skrivas från en ström Utgör par med nycklar och värden • Kan användas för konfiguration – – Inställningar lagras i en textfil Läses in i ett objekt av typen Properties Används i programmet Slipper kompilera om 93
Properties Ett exempel • Filen access. dat lagrad i conf • Lagrar inställningar för en databasuppkoppling driver. Class = sun. jdbc. odbc. Jdbc. Odbc. Driver driver. Type = jdbc: odbc: driver = Driver={Microsoft Access Driver (*. mdb)}; data. Source = DBQ=F: \Donald\java\musicorganiser\data\music. mdb 94
Properties Ett exempel • Vi läser in filen och hämtar värden try { String s = File. separator; File. Input. Stream stream = new File. Input. Stream(". . " + s "conf" + s + "access. dat"); Properties properties = new Properties(); properties. load(stream); String driver. Class = properties. get. Property("driver. Class"); String driver. Type = properties. get. Property("driver. Type"); String driver = properties. get. Property("driver"); String data. Source = properties. get. Property("data. Source"); } catch I(IOException ioe) { System. out. println(”IOException: ” + ioe. get. Message()); } 95
Stream. Tokenizer • java. io. Stream. Tokenizer • Opererar på en inström – Bryter ner innehållet från den till delar (tokens) – Varje del kan inspekteras och läsas för sig • Processen kontrolleras mot – Olika flaggor – Flaggornas tillstånd • Identifierar – – Identifierare Tal Strängar Kommentarer 96
Stream. Tokenizer Metoder och flaggor Metod Ansvar next. Token() Läser nästa token och returnerar dess typ TT_EOF Slutet på filen TT_EOL Slutet på en rad TT_NUMBER Ett nummer har lästs Lagrat i nval TT_WORD Ett ord har lästs Lagrat i sval lineno() Returnerar numret för aktuell rad to. String() En strängrepresentation av nuvarande token 97
Stream. Tokenizer Ett exempel • Filen ”hello. java” ska tolkas class Hello { public static void main(String[] args) { System. out. println(”Hello world”); } } 98
Stream. Tokenizer Ett exempel • Vi skapar strömmen som ska läsa från filen Stream. Tokenizer st = new Stream. Tokenizer( new Buffered. Reader(new Input. Stream. Reader( new File. Input. Stream(”hello. java”))); 99
Stream. Tokenizer Ett exempel st. next. Token(); while(st. ttype != Stream. Tokenzier. TT_EOF) { switch (st. ttype) { case Stream. Tokenizer. TT_NUMBER: System. out. println(”Nummer: ” + st. nval); break; case Stream. Tokenizer. TT_WORD: System. out. println(”Ord: ” + st. sval); break; case Stream. Tokenizer. TT_EOL: System. out. println(”EOL: ”); break; case ’”’ : case ’’’: System. out. println(”Sträng: ” + st. sval); break; default: System. out. println(”Tecken: ” + (char) st. ttype); break; } st. next. Token(); } st. close(); 100
Stream. Tokenizer Ett exempel • Resultatet Ord Ord Tecken Tecken Ord Tecken Sträng o s v : : : : : class Hello { public static void main ( String args [ ] ) { System. out. println ( Hello world 101
Objekt Serialisering • En teknik för att bestämma – Hur objekt skrivs ut till en ström (serialisera) – Hur motsvarande objekt ska läsas in från en ström (de-serialisera) • Interface java. io. Serializable • Interface java. io. Externalizable 102
Objekt Serialisering • Vilka typer kan serialiseras? • De som implementerar antingen – java. io. Serializable – java. io. Externalizable • Många av javas klasser är serialiserbara – Primitiva datatyper, genom Data. Input. Stream och Data. Output. Stream eller Object. Input. Stream och Object. Outputstream – String, File, Date, Properties – Vector om alla ingående objekt är serialiserbara! 103
Objekt Serialisering java. io. Serializable • • Finns inga metoder! Används endast för att identifiera att något är serialiserbart! Objektens grafer/tillstånd läses och skrivs automatiskt Superklasser/subklasser? • Om man vill definiera ett annat beteende – Implementera två specifika metoder – Variablerna kanske ska krypteras/dekrypteras? 104
Objekt Serialisering java. io. Externalizable • Används endast om – En klass explicit måste koordinera med sin superklass • Används inte under kursen 105
Objekt Serialisering • Default-mekanismen för de-serialisering – – Skapar ett nytt objekt (objektgraf) Analogt med att anropa en konstruktor Återskapar varje fält och värde Identiska med hur de såg ut när de skrevs ut • Ett objekt är serialiserbart om, och endast om – Alla ingående fält är serialiserbara eller – Deklarerade transient eller static • Annars kastas ett undantag 106
Objekt Serialisering • Strömmar som kan läsa/skriva objekt Object. Input. Stream Object. Output. Stream • Spara ner objekt på fil File. Input. Stream File. Output. Stream • Andra användningsområden – Skicka objekt mellan datorer med hjälp av sockets – Läs gärna kursen Internetprogrammering 1 107
Objekt Serialisering Object. Output. Stream • Metoder för att – Serialisera olika primitiva datatyper – Serialisera ett godtyckligt objekt Object. Input. Stream • Metoder för att – De-serialisera olika primitiva datatyper – De-serialisera ett godtyckligt objekt 108
Objekt Skriva ut ett objekt till fil, exempel 1 • Vilka strömmar behöver vi? En byteström som skriver till en fil En byteström som serialiserar objekt • Hur ska dessa kopplas ihop? Object. Output. Stream File. Output. Stream fil Date 109
Objekt Skriva ut ett objekt till fil, exempel 1 • Är det inte fantastiskt enkelt? try { File f = new File(”date 1. dat”); Date d = new java. util. Date(); Object. Output. Stream oos = new Object. Output. Stream( new File. Output. Stream(f)); oos. write. Object(d); oos. flush(); oos. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + e. get. Message()); } 110
Objekt Läsa in ett objekt från fil, exempel 1 • Vilka strömmar behöver vi? En byteström som läser från en fil En byteström som de-serialiserar objekt • Hur ska dessa kopplas ihop? Object. Input. Stream File. Input. Stream fil Date 111
Objekt Läsa in ett objekt från fil, exempel 1 • Är det inte otroligt? try { Object. Input. Stream ois = new Object. Input. Stream( new File. Input. Stream(”date 1. dat”)); Date d = (java. util. Date) ois. read. Object(); ois. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + e. get. Message()); } 112
Objekt Ett objekt av en egen klass • Nu ska vi skapa en egen klass • Vi gör klassen serialiserbar • Skapar en instans • Skriver ut hela objektet till fil • Läser in objektet från fil igen 113
Objekt Vår klass • Vi kanske har en gästbok? import java. io. *; Import java. util. Date; public class Guest implements Serializable { private String name; //implementerar serializable private String msg; //implementerar serializable private Date date; public Guest(String name, String msg) { this. name = name; this. msg = msg; date = new Date(); } //vi utelämnar metoder för att hämta name, msg och date } 114
Objekt Skriva ut ett objekt till fil, exempel 2 • Vilka strömmar behöver vi? En byteström som skriver till en fil En byteström som serialiserar objekt • Hur ska dessa kopplas ihop? Object. Output. Stream File. Output. Stream fil Guest 115
Objekt Skriva ut ett objekt till fil, exempel 2 • Inte mycket svårare? try { //vi bortser från kollen hur många gäster som finns File f = new File(”guest 1. g”); //vi utgår ifrån att värden hämtas från t ex en servlet Guest g = new Guest(name, msg); Object. Output. Stream oos = new Object. Output. Stream( new File. Output. Stream(f)); oos. write. Object(g); oos. flush(); oos. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + e. get. Message()); } 116
Objekt Läsa in ett objekt från fil, exempel 2 • Vilka strömmar behöver vi? En byteström som läser från en fil En byteström som de-serialiserar objekt • Hur ska dessa kopplas ihop? Object. Input. Stream File. Input. Stream fil Guest 117
Objekt Läsa in ett objekt från fil, exempel 2 • Inte mycket svårare? try { Object. Input. Stream ois = new Object. Input. Stream( new File. Input. Stream(”guest 1. g”)); Guest g = (Guest) ois. read. Object(); ois. close(); } catch (IOException ioe) { System. out. println(”IOException: ” + e. get. Message()); } 118
Objekt Specialiserad serialisering • Serialiserbara klasser som kräver särskild hantering – Under processen serialisering – Under processen de-serialization • Implementerar följande metoder private void read. Object(java. io. Object. Input. Stream ois) throws IOException, Class. Not. Found. Exception; private void write. Object(java. io. Object. Output. Stream oos) throws IOException; private void read. Object. No. Data() throws Object. Stream. Exception; 119
Java Servlets Vad kommer ni i kontakt med? • Specifika metoder anropas • Argument skickas med – Objekt som representerar en förfrågan – Objekt som representerar en respons • Separation av kod – – – Innebär att läsa in en statisk HTML-fil som sträng Lägga till innehåll i denna sträng Skicka tillbaka den till klienten Detta sker via en utström Utströmmen finns hos respons-objektet 120
Länkar Java. Script • SUN: s hemsida för Java http: //java. sun. com/ • Sida med länkar till all dokumentation http: //java. sun. com/docs/index. html • Java Tutorial http: //java. sun. com/docs/books/tutorial/ • Dokumentation för Java 2 SDK 1. 4. 2 http: //java. sun. com/j 2 se/1. 4. 2/docs/api/index. html • Lektion om Java I/O i Java Tutorial http: //java. sun. com/docs/books/tutorial/essential/io/ • Lektion om serialisering i Java Tutorial http: //java. sun. com/docs/books/tutorial/essential/io/serialization. html 121
Länkar Java. Script • Encodings http: //java. sun. com/j 2 se/1. 4. 2/docs/tooldocs/windows/native 2 ascii. html • Forum http: //forum. java. sun. com/ 122
- Java input and output statements
- Chapter 15 input output java
- Java file input output
- Java file input and output
- Console input and output in java
- Introduktion till vetenskapsteorin
- Introduktion til den finansielle sektor i danmark
- Vognmandsportalen
- Hinduismen helig skrift
- Konkretia
- Independent on y axis
- Virtual world definition
- Input vat and output vat
- Dremployee
- Input vat and output vat
- Input transformation output process
- Cpu input output burst cycle
- What are the inputs and outputs of system design
- Lateral aperture
- Scanner is input
- The ratio of input distance to output distance
- Example of scope and limitation of the study
- Dimensions of productivity
- Perisian dan perkakasan komputer
- Berikut yang termasuk dalam peripheral output adalah
- Laser printer is output device
- Conclusion for input and output devices of computer
- Contoh input proses dan output dalam kesehatan
- Ipo research paradigm
- Input output processor
- Keyboard mouse scanner digital camera are
- Printer is an input device
- Keyboard input output
- Advantages of input and output devices
- Input device
- Input/output statement in fortran
- Conclusion for input and output devices of computer
- Modern input devices
- Touchpad is a input or output device
- A device that prints text or illustrations on paper
- Conclusion of input and output devices
- The human inputs and outputs information through
- Ram input or output device
- Flowchart output
- Contoh flowchart yang benar
- Computer science input and output
- Nnn design
- Is system unit an input device
- And operation
- Inkjet printer input or output
- Plotter is an input or output device
- Digitizer is an input device
- Pipo register truth table
- Is a scanner an input or output device
- Streams in c++
- Touch screen is a input or output device
- Isolated input-output has
- Input and output of krebs cycle
- What is output in algorithm? give an example.
- Pseudocode for baking a cake
- Is actuators input or output
- Assume that a firm produces output using one fixed input
- Ipo chart in problem solving
- Vr input and output devices
- Model input output
- How is citric acid cycle regulated
- The type of serial port in 8051 microcontroller is
- Strobed input output
- Sand cone model
- Analog input and output devices
- Perangkat keras input device
- Input-transformation-output model restaurant
- Specialized input devices examples
- Screen output and keyboard input
- Principles of input output software
- Strobed input output
- Is a magnetic stripe reader input or output
- Is range input or output
- Trackball input or output
- Monitor printer speaker and projector are blank devices
- Input tahap intermediate code generator adalah
- What are the objectives of input design
- Input and output hardware
- Input process output
- Input system output
- Output knowledge
- Conclusion of input and output devices
- Reka bentuk antara muka
- Mouse input or output
- Input transformation output process
- Latar belakang input output
- Y=mx+b input output
- Input problem vs output problem
- The keyboard mouse scanner digital camera
- Micr input or output
- Chapter 6 input and output
- Computer input and output devices
- Settling time control system
- Console input output
- Input processing and output devices
- Hack alu truth table
- How do you write an input and output algorithm?
- Dfd level 1 perpustakaan
- Perangkat keras masukan adalah
- Input and output devices
- Is a vr headset input or output
- Mengapa semua sel tidak melakukan respirasi aerob
- Flowchart- oval
- Usb input output
- Extended hardware
- Input output memory
- Input/output diagram
- Accessing input output devices
- Input process output electronics
- Output device
- Each input has one output
- Quantity supplied vs supply
- Input process output
- Citric acid cycle input and output
- Input output
- Fax machine is input or output device
- Energy input and output nutrition
- Hardware input processing and output devices