Leksjon 7. Filer og unntak

Like dokumenter
Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak

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

INF Notat om I/O i Java

IN Notat om I/O i Java

TOD063 Datastrukturer og algoritmer

INF1000-SIKT - Notat om I/O i Java

Å lese tall fra en fil, klassen Scanner

INF1010 våren 2018 tirsdag 23. januar

INF Løsning på seminaropppgaver til uke 8

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

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

Avdeling for ingeniørutdanning Institutt for teknologi

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

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

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

Fra Python til Java, del 2

Videregående programmering 6

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

Mer objektorientert programmering

Leksjon 4. Metoder. Program, klasse og metode

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

Repetisjon. INF gruppe 13

Jentetreff INF1000 Debugging i Java

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Eksamen. Objektorientert Programmering IGR 1372

Algoritmer og datastrukturer A.1 BitInputStream

Litt om pakker og mest om data inn og ut

UNIVERSITETET I OSLO

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

Løse reelle problemer

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Ole Christian Lingjærde, 12. september 2013

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

Forelesning inf Java 4

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

UNIVERSITETET I OSLO

Del 3: Evaluere uttrykk

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

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

UNIVERSITETET I OSLO

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Løsningsforslag Test 2

Enkel lesing og skriving i Java

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

import java.io.*; import java.util.*; import javagently.text;

Post-it spørsmål fra timen (Arv og subklasser)

Kapittel 8: Programutvikling

UNIVERSITETET I OSLO

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

INF2100. Oppgaver 26. september til 1. oktober 2007

Leksjon 3. Kontrollstrukturer

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

Løsningsforslag til eksamen i INF1000 våren 2006

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

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

Løse reelle problemer

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

Leksjon 3. Kontrollstrukturer

INF 1000 høsten 2011 Uke september

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

UNIVERSITETET I OSLO

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen

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

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

Dagens tema Kapittel 8: Objekter og klasser

Endret litt som ukeoppgave i INF1010 våren 2004

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

GJØVIK INGENIØRHØGSKOLE

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

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

Gjennomgang av eksamen H99

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

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

Argumenter fra kommandolinjen

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

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

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

UNIVERSITETET I OSLO

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

Oblig4 - forklaringer. Arne og Ole Christian

Innlesing fra fil og metoder med returverdier

Feilmeldinger, brukerinput og kontrollflyt

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

Introduksjon til objektorientert programmering

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; }

GUI («Graphical User Interface») del 2

Transkript:

6108 Programmering i Java Leksjon 7 Filer og unntak Del1: 7.1 7.2 Roy M. Istad 2015

Fil permanent lagring Ønsker at program skal kunne ta vare på data over tid, fra en kjøring til den neste (kontra hurtigminnet som har midlertidig lagring). Filer brukes for å lagre data permanent på ytre lager (f.eks. harddisk). Det kan være vanlige tekstfiler som er lesbare for oss i en vanlig tekstbehandler/editor. Data kan også lagres på binærfiler. Disse kan kun leses av spesielle program (slike filer sier man er lagret i et proprietært format). 6108 Programmering i Java Leksjon 7 Del 1 side 2

Dataflyt mellom hurtigminne og fil Skriving (lagring): Overføring av data fra hurtigminnet til fil Lesing: Overføring av data fra fil til hurtigminnet. Samme program kan gjerne både lese fra, og skrive til fil. Et program kan håndtere én eller flere filer. 6108 Programmering i Java Leksjon 7 Del 1 side 3

Lagre data, hente data Ved lagring av data på fil utføres tre grunnleggende operasjoner: Åpne fil Skrive dataene til fil Lukke fil Ingen slik fil? Lag en ny. Fil finnes fra før? - Overskrive innholdet? - Legge til flere data? Ved henting av data fra fil utføres tre grunnleggende operasjoner: Åpne fil Lese dataene fra fil Lukke fil 6108 Programmering i Java Leksjon 7 Del 1 side 4

Eksempelkode: Lagre data import java.io.*; // Importerer aktuelle filklasser public class SkrivNavneliste { public static void main(string[] args) throws Exception { // 1) Åpner filen for skriving String filnavn = "navn.txt"; PrintWriter skriver = new PrintWriter(filnavn); String[] navntab = {"Jo","Jan","June","Jenny"}; } } // 2) Skriv hvert navn i navntab til fil for (int i=0; i<navntab.length; i++) skriver.println( navntab[i] ); // 3) Lukker filen skriver.close(); 0123 Jo Jan June Jenny navn.txt 6108 Programmering i Java Leksjon 7 Del 1 side 5

Unntak: Første møte Problem: Opprette fil på en underkatalog som ikke finnes? Forsøk på å lage PrintWriter-objektet feiler, og programutførelsen reagerer med å kaste et unntak (et objekt for en feilsituasjon). I toppen av main-metoden er det føyd til en throws-klausul: public static void main(string[] args) throws Exception Dvs. main-metoden inneholder aktivitet som kan kaste unntak. Men, om et problem oppstår, skal unntaket bare kastes videre (throws). Dette vil medføre at programkjøringen blir avbrutt med en feilmelding (runtimeerror). Vi ser senere på hvordan unntak håndteres med en try-catch-setning. 6108 Programmering i Java Leksjon 7 Del 1 side 6

Usjekkede/sjekkede unntak Program har «krasjet» før også. F.eks. ved heltallsdivisjon med 0, eller tabellindekser som har vært utenfor lovlig område. Hvorfor var ikke unntak tema der og da? Usjekkede unntak: Problem som ikke må håndteres i programkoden medfører programkrasj om de oppstår. Sjekkede unntak: Problemsituasjoner som må håndteres i programkoden throws-klausul (videreformidlet, ikke løst - førstevalget) try-catch-setning (mer detaljert problemløsning senere) 6108 Programmering i Java Leksjon 7 Del 1 side 7

Skrive til fil String fil = "filnavn.txt"; 1) Filen finnes ikke fra før: Ny fil blir opprettet. PrintWriter skriver = new PrintWriter(fil); 2) Filen finnes fra før. - Overskrive eksisterende innhold: PrintWriter skriver = new PrintWriter(fil); «append» - heng på - Føye til mer innhold, henge på nye linjer: FileWriter skrivelink = new FileWriter(fil,true); PrintWriter skriver = new PrintWriter(skrivelink); //Alt. new PrintWriter(new FileWriter(fil, true)); 6108 Programmering i Java Leksjon 7 Del 1 side 8

Lese fra fil tekstfil.txt 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 Dette er teksten som utgjør linje 1. Her er linje 2 og dette er linje 3. Så kommer fjerde og siste linje. Linjesluttsmerke: 6108 Programmering i Java Leksjon 7 Del 1 side 9

Datastrøm Ved lesing «strømmer» data fra fil til hurtigminnet Ved skriving strømmer data fra hurtigminnet til fil. Hva strømmer? Strøm av linjer, strøm av ord, eller bare en strøm av byter. 6108 Programmering i Java Leksjon 7 Del 1 side 10

Scanner-klassen Velegnet til lesing av tekstfiler (datastrøm fra fil) Krever: import java.util.*; Opprett et Scanner-objekt kalt «leser» while ( leser.hasnext() ) true: fortsett så lenge det er noe mer (String-data) på filen og bruk leser.next() til å hente neste tegnsekvens fra filen false: avslutt data-henting fra filen Alternativ: Linjevis håndtering av data fra fil Så lenge leser.hasnextline() er true, bruk leser.nextline() til å hente neste linje (String-data) fra filen Listing 7.2, side 274: VisLinjeNr 6108 Programmering i Java Leksjon 7 Del 1 side 11

Fra fil til datastruktur Hvordan sortere en navneliste lagret på fil? lese alle navnene inn i en tabell (i hurtigminnet) sortere tabellen skrive alle navnene tilbake til filen igjen Tabellstørrelse? String[] navntab = new String[4]; 6108 Programmering i Java Leksjon 7 Del 1 side 12

Sortering av navneliste «på fil». File innfil = new File("navn.txt"); Scanner leser = new Scanner(innFil); // NB! File-objekt først // Antall navn ligger på første linje int antnavn = parseint( leser.nextline() ); String[] navntab = new String[antNavn]; for (int pos=0; pos<antnavn; pos++) navntab[pos] = leser.nextline(); leser.close(); // Tabellen er fylt med navn Arrays.sort(navnTab); // Tabellen sorteres PrintWriter skriver = new PrintWriter("sortert.txt"); for (int pos=0; pos<antnavn; pos++) skriver.println(navntab[pos]); skriver.close(); 6108 Programmering i Java Leksjon 7 Del 1 side 13

6108 Programmering i Java Slutt på leksjon 7 Del 1