Leksjon 7. Filer og unntak

Like dokumenter
Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak

INF Notat om I/O i Java

IN 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

TOD063 Datastrukturer og algoritmer

INF1000-SIKT - Notat om I/O i Java

Å lese tall fra en fil, klassen Scanner

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

INF Løsning på seminaropppgaver til uke 8

INF1010 våren 2018 tirsdag 23. januar

Oblig 4Hybelhus litt mer tips enn i oppgaven

Mer objektorientert programmering

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

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

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

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

Videregående programmering 6

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

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

Algoritmer og datastrukturer A.1 BitInputStream

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

Leksjon 4. Metoder. Program, klasse og metode

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

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

Avdeling for ingeniørutdanning Institutt for teknologi

Løse reelle problemer

Eksamen. Objektorientert Programmering IGR 1372

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

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

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

Fra Python til Java, del 2

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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)

Repetisjon. INF gruppe 13

Jentetreff INF1000 Debugging i Java

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

Kapittel 8: Programutvikling

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

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

UNIVERSITETET I OSLO

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

Enkel lesing og skriving i Java

INF2100. Oppgaver 26. september til 1. oktober 2007

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Løse reelle problemer

INF 1000 høsten 2011 Uke september

Løsningsforslag Test 2

Del 3: Evaluere uttrykk

Leksjon 3. Kontrollstrukturer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

Oblig4 - forklaringer. Arne og Ole Christian

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

Leksjon 3. Kontrollstrukturer

GJØVIK INGENIØRHØGSKOLE

INF Uke 10. Ukesoppgaver oktober 2012

Dagens tema Kapittel 8: Objekter og klasser

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

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

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå

Endret litt som ukeoppgave i INF1010 våren 2004

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

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

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

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

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

UNIVERSITETET I OSLO

Innlesing fra fil og metoder med returverdier

Seminaroppgaver IN1010, uke 2

C# (.Net) EE1212 Objektorientert programmering

Introduksjon til objektorientert programmering

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

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

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

Rekursjon som programmeringsteknikk

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Læreboken på 45 minutter

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 1

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 2

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 (runtime error). Vi ser senere på hvordan unntak håndteres med en try-catch-setning. 6108 Programmering i Java Leksjon 7 Del 1 side 6 3

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 4

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 5

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 6

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 7