Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler



Like dokumenter
Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

Å lese tall fra en fil, klassen Scanner

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak

Kapittel 14: Filer og strømmer. Kort versjon

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

TDT4105 Informasjonsteknologi, grunnkurs

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Teori og oppgaver om 2-komplement

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

Leksjon 7. Filer og unntak

Kapittel 12: Filer og strømmer INF 100. Java som første programmeringsspråk

C# (.Net) EE1212 Objektorientert programmering

Testlig og binær form

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Innhold Innledning 1. 5 Løkke som kontrollstruktur Et program med løkke som kontrollstruktur 132. vii

Oblig 4Hybelhus litt mer tips enn i oppgaven

AlgDat 12. Forelesning 2. Gunnar Misund

Eksamen. Objektorientert Programmering IGR 1372

2 Om statiske variable/konstanter og statiske metoder.

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

Løse reelle problemer

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Løse reelle problemer

Husk å registrer deg på emnets hjemmeside!

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

HØGSKOLEN I SØR-TRØNDELAG

Kapittel 14: Filer og strømmer. Kort versjon

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

HØGSKOLEN I SØR-TRØNDELAG

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Læringsmål for forelesningen

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Læringsmål og pensum. v=nkiu9yen5nc

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

INF1000 Prøveeksamen Oppgave 7 og 9

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak ( exceptions ) - 3rd edition: Kapittel 6. Professor Alf Inge Wang

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

Tall. Binære regnestykker. Binære tall positive, negative heltall, flytende tall

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Binærfiler versus tekstfiler

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Innhold. 3.7 Å lese data fra brukeren Klassen String Å formatere utskrift av desimaltall... 80

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

INF1000-SIKT - Notat om I/O i Java

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Mattespill Nybegynner Python PDF

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Kapittel 9: Sortering og søking Kort versjon

HØGSKOLEN I SØR-TRØNDELAG

INF Notat om I/O i Java

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Læringsmål for forelesningen

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

TDT Prosedyre- og objektorientert programmering

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Rekursjon. Binærsøk. Hanois tårn.

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

lagring med HTML5 Offline lagring Offline Informasjonsteknologi 2 Gløer Olav Langslet Sandvika VGS

Enkel lesing og skriving i Java

Del 1 En oversikt over C-programmering

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

HØGSKOLEN I SØR-TRØNDELAG

Læreboken på 45 minutter

HØGSKOLEN I SØR-TRØNDELAG

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Et større programeksempel. Hvordan løse et reelt problem med en objektorientert fremgangsmåte

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Programmeringsspråket C Del 3

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

Hashing. INF Algoritmer og datastrukturer HASHING. Hashtabeller

Oblig3Hybelhus (INF Høst 2011) én av to mulige oppgaver for oblig3 (du løser denne eller Oblig3Pi)

Transkript:

Plan for dagen Vprg 4 LC191D Videregående programmering Høgskolen i Sør-Trøndelag Avdeling for informatikk og e-læring Anette Wrålsen Del: Intro til tekstfiler Del II: Mer om tekstfiler, Scanner-klassen Del III: Binærfiler og serialisering Ca. en time på hver av delene, inkludert pauser Dagens tema - filbehandling! Hva er en datafil? En datafil inneholder data, til forskjell fra en programfil. Hva bruker vi datafiler til? Vi bruker dem til å lagre data og informasjon om programtilstand mellom kjøringer. Trenger vi datafiler? Ja! Alternativet er å bruke databaser. Strømmer Når vi skal skrive til eller lese fra en fil, gjøres det gjennom en forbindelse kalt en strøm. Vi kan ha lesestrømmer og skrivestrømmer, men vi kan ikke både lese og skrive med samme strøm. For hver fil vi skal lese fra eller skrive til må vi åpne en strøm, og strømmen må avsluttes når vi er ferdige. Tekstfiler En tekstfil er en fil som er lesbar for mennesker vedhjelp av en teksteditor. Tekstfiler kalles noen ganger sekvensielle filer fordi leses sekvensielt. De består også av en sekvens med linjer. Slike filer lagres ofte som filnavn.txt. Klassen FilLeser.java Vi skal nå se på et program som leser linje for linje fra en tekstfil. Hver linje skal skrives på skjermen.

Oppsummering Vi oppretter et FileReader-objekt (som igjen oppretter en lesestrøm og kan sende oss data fra den). Deretter oppretter vi en BufferedReader som vi kan lese gjennom for å få færre diskaksesser. Husk å lukke filen til slutt! Klassen FilSkriver.java Vi skal nå se på et program som går i løkke og skriver nye linjer til datafilen fra forrige oppgave. Oppsummering Vi oppretter FileWriter, BufferedWriter og PrintWriter-objekter for å få best mulig metoder tilgjengelig. Husk at når du skriver til fil er det ekstra viktig å huske å stenge av strømmen - ellers er faren stor for å miste data. Gruppeoppgave Lag en ren tekstfil kalt data.txt i en editor, og skriv inn navn og fødselsdato til alle i gruppa i filen (en linje per person). Lag et program som leser filen og teller antall linjer (og dermed antall personer på gruppa). Anta at dere ønsker å lagre denne informasjonen i en samling Person-objekter. Hvordan kan dere gå fram for å hente ut relevant informasjonen fra filen? Burde dere lagret dataene annerledes? Dette trenger dere ikke å programmere, men foreslå en strategi. Pause! Fram til 09:40 Scanner java.util.scanner brukes for å finne data av forskjellige typer i en strøm eller streng. Et Scanner-objekt ser på de neste tegnene i strømmen, og prøver å omforme dem til datatypen vi ber om (for eksempel int eller double). Går ikke dette, kaster den InputMismatchException. Den skanner kun framover i strømmen.

Eksempel - Klassen LesMangeTall Programmeringsoppgave Lag et program som krypterer ei tekstfil. Det skal lese et og et tegn fra tekstfila, som krypteres til heltall vha. klassen Kryptosystem som du finner i it s learning. Resultatene lagres som tall til fil med et mellomrom mellom hvert tall. Klarer du å utvide Kryptosystem med en dekrypteringsmetode og lage et dekrypteringsprogram? Prøv å bruke Scannerklassen til å scanne strenger etter tall. For spesielt interesserte: Hvordan knekker man en kryptering som denne? Pause! Fram til 10:45 Hvordan overføres tall til en tekstfil? Tekstlig vs. binær data Når dataene er lagret som tekst, er de mulige å lese for mennesker. Men vi må gå gjennom ekstra steg for å omforme tallet 25 til en bitsekvens, og senere for å oversette tilbake. Kan vi ikke lagre det direkte som 11001?

Binær overføring av data Vi kan godt lagre 25 direkte som 11001. Da lagrer vi ikke lenger som en tekstfil, men som en såkalt binær fil. Vi tenker da på filen som en lang sekvens med bits. Dette sparer en lagringsplass, men filen blir ikke leselig for mennesker. Direkte tilgang til innholdet i en fil I denne typen filer er det vanlig å hoppe fram og tilbake i filen som vi ønsker under lesing. Den er ikke organisert som linjer, så det er opp til programmereren å holde styr på hva som står hvor, helt ned til hver enkelt bit! Vi flytter oss i filen ved å hoppe et antall bytes fram eller tilbake. Det betyr at det kan være veldig krevende å holde styr på innholdet i en slik fil. Hvordan kan vi gå fram hvis vi ønsker å lagre grupper av heltall på en binær fil, der hver gruppe innholder et ukjent antall heltall? Å lagre objekter Vi har allerede jobbet med en fil som inneholdt informasjon som beskrev objekter. Men hvordan gjør man dette generelt? Java tilbyr metoder som ordner dette for oss, men ikke alle programmeringsspråk gjør det. La oss først anta at vi må gjøre det selv. Å lagre objekter forts. Vi må lagre alle attributtene til objektet i et system, for eksempel en på hver linje i en tekstfil. Har objektet andre objekter som attributter, må vi lagre informasjon om dem også, har det tabeller må de gjennomløpes osv. Dette kan bli omstendelig! Vi må altså lage en spesiell lagringsmetode for hver klasse, og en egen metode for å gjøre det motsatte.

Serialisering Java tilbyr en teknikk for å lagre objekter til fil, kalt serialisering. Det lar oss lagre hele objekter med en enkelt setning i en binær fil. Ved serialisering behandler filen sekvensielt, dvs. gjennomløpes i en retning. Hva skal til for at et objekt skal kunne serialiseres? Klassen må implementere interfacet java.io.serializable. De aller fleste klassene i Java- APIet gjør dette allerede. I prosessen lagres objektvariabler men ikke klassevariabler. Objekter som lagres får et serienummer, slik at de ikke blir lagret flere ganger enn nødvendig på samme fil. Hvis klassen endrer seg mellom skriving og lesing av filen kastes InvalidClassException. Eksempelkode Implementasjon av java.io.serializable: Lagring: Lesing: Oppgave Start på Øving 4 - der skal du først opprette en samling objekter fra en tekstfil, serialisere dem og til slutt skrive dem ut igjen for å se om det stemmer med den opprinnelige filen.