Leksjon 7. Filer og unntak

Like dokumenter
Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

INF1010 våren 2018 tirsdag 23. januar

Leksjon 3. Kontrollstrukturer

IN Notat om I/O i Java

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Leksjon 3. Kontrollstrukturer

INF Notat om I/O i Java

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

INF1000-SIKT - Notat om I/O i Java

Leksjon 2. Setninger og uttrykk

Leksjon 2. Setninger og uttrykk

Enkel lesing og skriving i Java

Jentetreff INF1000 Debugging i Java

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

INF 1010, vår 2005 Løsningsforslag uke 11

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

UNIVERSITETET I OSLO

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

Videregående programmering 6

Klassen javax.swing.joptionpane

Å lese tall fra en fil, klassen Scanner

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Læringsmål for forelesningen

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

Leksjon 3. Kontrollstrukturer

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

TOD063 Datastrukturer og algoritmer

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

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

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Litt om pakker og mest om data inn og ut

INF Uke 10. Ukesoppgaver oktober 2012

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

HØGSKOLEN I SØR-TRØNDELAG

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak 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

Kapittel 13: Unntakshåndtering

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Løsningsforslag til eksamen i INF1000 våren 2006

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Del 3: Evaluere uttrykk

INF1000 Prøveeksamen Oppgave 7 og 9

INF1000: noen avsluttende ord

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

UNIVERSITETET I OSLO

INF Løsning på seminaropppgaver til uke 8

Kapittel 13: Unntakshåndtering

LO191D/LC191D Videregående programmering eksamen des. 2009

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Fra Python til Java, del 2

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

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

Leksjon 4. Metoder. Program, klasse og metode

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

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

6108 Programmering i Java. Leksjon 4. Metoder. Roy M. Istad 2015

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

TDT4100 Objektorientert programmering

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

Bruk av class Scanner, split(), FileWriter og Formatter som alternativ til easyio i INF1000.

Løse reelle problemer

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

UNIVERSITETET I OSLO

EKSAMENSFORSIDE. Emnenavn: Programmering i Java Tid fra / til: 10:00-14:00. Fakultet: Handelshøyskolen Antall vedlegg: 1

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF 1000 høsten 2011 Uke september

Dagens tema Kapittel 8: Objekter og klasser

Mer objektorientert programmering

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF1000 undervisningen INF 1000 høsten 2011 Uke september

UNIVERSITETET I OSLO

Transkript:

6108 Programmering i Java Leksjon 7 Filer og unntak Del2: 7.2 og 7.4 Roy M. Istad 2015 Fil: Permanent lagring av data PrintWriter(filnavn) throws Exception usjekkede/sjekkede unntak? skriver.println(data-i-tekstlinje) skriver.close(); Scanner leser = new Scanner(filnavn); File fil = new File(filnavn); Scanner leser = new Scanner(fil); leser.close(); Kvasikode: Åpne fila for lesing Les inn (første) linje fra fila Gjenta til slutten på fila Behandle innlest linje Les inn (neste) linje fra fila Lukk fila 6108 Programmering i Java Leksjon 7 Del 2 side 2 1

Eks. Heltall på fil: tallfil.txt 23 40 17 82 17 20 47 12 7 88 0 12 56 Splitter tekstlinje (String) parseint(string) Lese typede data Heltall adskilt av mellomrom og linjeskift (ulikt antall tall på linjene) Lesing fra fil: int sum = 0; while ( leser.hasnextint() ) sum += leser.nextint(); leser.close(); out.println("sum: " + sum); OBS! hasnextdouble og nextdouble leser desimaltall sum = 0 + 23 6108 Programmering i Java Leksjon 7 Del 2 side 3 Strukturerte data int String double int linje 1;Spade;220.50;23 1 Spade 220.50 23 «Skilletegnseparert fil» med varedata split Første linje kan ha info om dataene (bare kaste den?) int String double int Øvrige linjer har skilletegn mellom verdier i ulike datatyper (men, samme oppbygging av hver linje) Les en hel linje, splitt den på skilletegnet, og flytt verdiene over i egnede variabler (tabell/objekt) 6108 Programmering i Java Leksjon 7 Del 2 side 4 2

Strukturerte data: Vare-klassen public class Vare { int nr; String navn; double pris; int antall; // Konstruktør som setter verdi til alle objektvariabler public Vare(int nr, String navn, double pris, int antall) { this.nr = nr; this.navn = navn; this.pris = pris; this.antall = antall; : // Flere konstruktører : // Objektmetoder // Oppretter et vare-register // med plass til MAX_ANT stk. Vare[] vareliste = new Vare[MAX_ANT]; 6108 Programmering i Java Leksjon 7 Del 2 side 5 Scanner leser = new Scanner( new File(filnavn) ); String linje; if ( leser.hasnextline() ) // Fjerner kolonneoverskriftene linje = leser.nextline(); // Brukes ikke til noe (kastes ) int i = 0; // teller antall varer while ( leser.hasnextline() )&& { i<max_ant ) { linje = leser.nextline(); String[] datatab = linje.split(";"); int nr = parseint(datatab[0]); String navn = datatab[1]; double pris = parsedouble(datatab[2]); int antall = parseint(datatab[3]); vareliste[i++] = new Vare(nr,navn,pris,antall); // NB! Postinkrementering leser.close(); int antallvarer = i; // Ikke sikkert at tabellen er full... Strukturerte data: Vare-klassen linje.split("#"); linje.split(" - "); regex: s. 225 6108 Programmering i Java Leksjon 7 Del 2 side 6 3

Unntakshåndtering Vi har fram til nå kjørt program i en problemfri setting. Vi kan ikke forutsette at det er slik i realistiske program. Noen vanlige feil som kan oppstå ved bruk av filer: Filnavnet kan være feil. Filen er ikke dervi tror den er. Filen kan være skadet. Filinnholdet er ikke organisert som det er forutsatt i programkoden (typekonflikt). 6108 Programmering i Java Leksjon 7 Del 2 side 7 Unntak - Exception Unntak: Feil eller avvik fra normalt programforløp - Exception. Kjente unntak: Dele et heltall på null, eller hente ut en verdi fra en tabell via en ulovlig indeks. Vi har så langt akseptert at programmet har krasjet i slike tilfeller. Noen unntak kan ikke bare ignoreres i et program! Vi får ikke programmert filbehandling uten å ta stilling til hva som skal skje om et problem oppstår. Vi må enten fange og håndtere unntaket, eller eksplisitt videresende unntaket. Hittil har vi valgt det siste ved å merke metoder med throws Exception. Og, når et unntak blir videresendt fra main blir resultatet igjen at programmet krasjer 6108 Programmering i Java Leksjon 7 Del 2 side 8 4

Problem oppstår: Et unntak kastes Et problem har oppstått og unntaket e er kastet. Tenk på unntaket som en ball som blir kastet. Hvis vi ikke tar imot ballen, eller om vi får den og bare kaster den videre (throws), så vil den havne i vinduet som da knuses (dvs. programmet krasjer). 6108 Programmering i Java Leksjon 7 Del 2 side 9 Fange unntak try { Setninger som innebærer en viss risiko forsøkes utført her. Går noe galt blir det kastet et unntak... catch (Unntaksklasse e) {... et unntak e blir fanget her. Dvs. vi har noen setninger som håndterer situasjonen som er oppstått. Navnet e på unntaket er tatt fra e i exception. Et unntak blir representert ved et objekt. Metoden som oppdager feilsituasjonen og kaster unntaket, vil opprette et objekt fra en av unntaksklassene. Dette objektet inneholder detaljert informasjon om selve problemet. 6108 Programmering i Java Leksjon 7 Del 2 side 10 5

Noen unntaksklasser (side 300) tabellverdi[-1] 5/0 parseint(3a4) parsedouble(2,0); 6108 Programmering i Java Leksjon 7 Del 2 side 11 try { skriver = new PrintWriter("kat/ut.txt"); int tall = parseint( showinputdialog("gi tall:") ); skriver.println(tall); catch (FileNotFoundException e) { melding = "Katalogen finnes ikke!"; catch (NumberFormatException e) { melding = "Feil tallformat!"; catch (Exception e) { melding = "Feil med dataene!"; finally { if ( skriver!= null ) { skriver.close(); try-catch-finally NB! Exception-klassen fanger alle unntak, brukes alene eller helt sist (som her, med litt «finsiling» av feilene først). Finally-greina blir alltid utført, uansett hva som har skjedd foran 6108 Programmering i Java Leksjon 7 Del 2 side 12 6

Robust innlesing av heltall (via metode) private public static int lespositivtheltall () { int tall = 0; boolean ok = true; // Det går sikkert bra String feil = "", melding = "Gi positivt heltall:"; do { String talltxt = showinputdialog (feil+melding); try { tall = parseint( talltxt ); ok = tall > 0; catch ( NumberFormatException e ) { ok = false; feil = "Ulovlig verdi!" + "\n"; while (!ok ); return tall; try-catch er nyttig til mye mer enn fil-behandling! 6108 Programmering i Java Leksjon 7 Del 2 side 13 6108 Programmering i Java Slutt på leksjon 7 Del 2 7