Å lese tall fra en fil, klassen Scanner

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

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

INF Notat om I/O i Java

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

IN Notat om I/O i Java

Litt om pakker og mest om data inn og ut

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

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

Kapittel 14: Filer og strømmer

Kapittel 14: Filer og strømmer

Leksjon 7. Filer og unntak

Kapittel 14: Filer og strømmer. Kort versjon

INF1000-SIKT - Notat om I/O i Java

INF1010 våren 2018 tirsdag 23. januar

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

TOD063 Datastrukturer og algoritmer

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

Leksjon 7. Filer og unntak

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

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Leksjon 7. Filer og unntak

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.

Fra Python til Java, del 2

Eksamen. Objektorientert Programmering IGR 1372

INF1000 : Forelesning 5

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

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

UNIVERSITETET I OSLO

Forelesning inf Java 5

Læreboken på 45 minutter

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

Kapittel 14: Filer og strømmer. Kort versjon

Jentetreff INF1000 Debugging 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

Mer objektorientert programmering

UNIVERSITETET I OSLO

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.

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

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

INF1000 Uke 5. Litt om objekter, filer med easyio, tekst

UNIVERSITETET I OSLO

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

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

Algoritmer og datastrukturer A.1 BitInputStream

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

Klassen javax.swing.joptionpane

INF2100. Oppgaver 26. september til 1. oktober 2007

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

UNIVERSITETET I OSLO

Oblig 4Hybelhus litt mer tips enn i oppgaven

Løsningsforslag til eksamen i INF1000 våren 2006

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

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

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

UNIVERSITETET I OSLO

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

UNIVERSITETET I OSLO

Enkel lesing og skriving i Java

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

Beregning av med svært mange desimaler

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

Løsningsforslag Eksamen V08. Oppgave 1. Oppgave 1.1. Oppgave 1.2. Oppgave 1.3. Se i boka/forelesningsnotatene:-) Se i boka/forelesningsnotatene:-)

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

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Videregående programmering 6

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

Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java

INF1000 Behandling av tekster

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

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

GUI («Graphical User Interface») del 2

Kapittel 8: Programutvikling

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

Java 6. Eksempel med to-dimensjonal array Filbehandling Tekster

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

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

INF1000: Forelesning 4. Mer om arrayer Metoder

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Forklaring til programmet FilTest.java

INF Løsning på seminaropppgaver til uke 8

Transkript:

Å lese tall fra en fil, klassen Scanner 1. Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2. Kan skanne teksten etter data av ulike typer. 3. Kan kun skanne framover i teksten. Vis programliste 12.2 side 435.

Hva skjer når tall skrives til / leses fra en fil? 11001 int tall1 = 25; heltallet 25 på binær form skriver.println(tall); 11001 int tall2 = Integer.parseInt(s); 110010 110101 String s = leser.readline() i primærminnet 110010 110101 Teksten 25 består av tegnene 2 (kode 50 = 110010 2 ) og 5 (kode 53 = 110101 2 ). Teksten etterfølges av linjeskift, ikke vist her. på disken

Tekstlig kontra binær overføring av data Tekstlig overføring av (tall-)data Filen kan leses av mennesker. Omformingen til / fra binær form tar tid. Dersom desimaltall skal beholde nøyaktigheten må en double skrives til fil med 15 sifre. Binær overføring av (tall-)data Dataene overføres direkte mellom primærminnet og datafilen. Filen kan ikke leses av mennesker. Ingen tid brukes til omforming mellom forskjellige representasjoner av tallet. Dataene tar akkurat like stor plass på filen som i primærminnet. Interface for binær dataoverføring DataInput DataOutput

Direkte tilgang til innholdet i en fil Et objekt av klassen RandomAccessFile knyttes til en fil som kan åpnes for både lesing og skriving. Vi kan flytte oss framover og bakover i filen ved å posisjonere filpekeren et antall byte framover eller bakover. Klassen RandomAccessFile implementerer interfacene for binær dataoverføring. Konstruktør: RandomAccessFile(String filnavn, String modus) modus = r eller rw Metoder - alle kan kaste IOException: long getfilepointer(), void seek(long pos), long length() void close() char readchar(), int readint(), double readdouble() void writechar(int tegn), void writeint(int heltall), void writedouble(double desimaltall)

Eksempel import java.io.*; class DirekteTilgFil { public static void main(string[] args) throws IOException { RandomAccessFile fil = new RandomAccessFile("Direktefil.dat", "rw"); /* Skriver 10 heltall til filen */ for (int i = 0; i < 10; i++) fil.writeint(i); long fillengde = fil.length(); System.out.println("Filen har lengde: " + fillengde); /* * Flytter filpekeren til tall nr 7, leser det, * ganger det med 10, og skriver det tilbake igjen */ fil.seek(6 * 4); // flytter forbi 6 tall, hver på 4 byte int tall = fil.readint(); tall *= 10; fil.seek(6 * 4); // flytter filpekeren "tilbake" fil.writeint(tall); /* Leser hele filen */ fil.seek(0); // flytter til begynnelsen av filen try { while (true) { // stopper når EOFException kastes int t = fil.readint(); System.out.println(t); catch (EOFException e) { fil.close(); 0 1 2 3 4 5 6 7 8 9 fil.seek(6 * 4); 2 /* Utskrift Filen har lengde: 40 0 1 2 3 4 5 60 7 8 9 */ 1 for (int i = 0; i < 10; i++) fil.writeint(i); 3 fil.readint(tall)

Hvordan lagre et objekt på fil? Hvordan lagrer vi et objekt av klassen Register på fil? class Register { private ArrayList<Utstyr> liste = new ArrayList<Utstyr>();.. class Utstyr { public static final int BESTILLINGSFAKTOR = 5; private String betegnelse; private String leverandør; private int pålager; private int nedregrense; Vi må plukke objektet fra hverandre og lagre hver enkelt dataverdi, for eksempel slik: skriv BESTILLINGSFAKTOR til filen skriv antall utstyrsobjekter til filen for (int i = 0; i < register.finnantutstyr(); i++) { Utstyr u = register.finnutstyr(i); skriv betegnelse, leverandør, pålager, nedregrense til filen tilsvarende for alle utstyrsobjekter En streng må lagres ved at tegnene legges i en tabell av char. Tabellen og tabellens lengde skrives til filen. Ved innlesing må vi gjennomføre den omvendte prosessen. Eller -?

Serialisering Java tilbyr serialisering av objekter. Hele objektet lagres med én setning. Filen er ikke lesbar i en editor. Filen er sekvensiell og åpnes for lesing eller skriving. Å skrive objektet register til fil: FileOutputStream utstrøm = new FileOutputStream( register.ser"); ObjectOutputStream ut = new ObjectOutputStream(utstrøm); ut.writeobject(register); ut.close(); Å lese objektet fra fil: FileInputStream innstrøm = new FileInputStream("leilighet1.ser"); ObjectInputStream inn = new ObjectInputStream(innstrøm); Object obj = inn.readobject(); eventuell casting til Register gir advarsel: warning: [unchecked] unchecked cast gjøre noe med objektet inn.close();

Hva må til for at et objekt skal kunne serialiseres? Klasser som beskriver serialiserbare objekter må implementere interfacet java.io.serializable. Enkelt! Det inneholder ingen metoder. I vårt tilfelle: class Utstyr implements java.io.serializable { class Register implements java.io.serializable { De aller fleste klassene i SDK implementerer Serializable Hva skjer i serialiseringsprosessen? Objektvariabler lagres, klassevariabler lagres ikke. Informasjon om hver enkelt klasse, inkludert versjon, lagres. En referanse til et objekt fører til at objektet lagres første gang referansen påtreffes. Objektet får da et serienummer. Neste gang referansen påtreffes, lagres bare serienummeret. Dersom klassen forandrer seg (ny versjon blir laget) mellom skriving og lesing av filen kastes unntaket InvalidClassException.

Sammendrag - datafiler Sekvensielle datafiler med tekstlig overføring av data (kap. 12.1-12.7) Åpnes for lesing eller skriving. Leser linjevis med readline(). Skriver med print() og println(). Eventuelle data av talltyper blir omformet til/fra tekst. Konsollet er et spesialtilfelle av denne typen fil. Kan lage en fil av denne typen i en editor. Binær overføring av data (kap. 12.8) Data, også data av talltyper, overføres uten omforming. En fil med slike data må alltid lages av et program. Filer med direkte tilgang (kap. 12.9) Kan åpnes for både lesing og skriving. Ikke sekvensiell: Kan flytte filpekeren framover og bakover. Data overføres binært. Kun data av typen char vil være lesbare i en editor. Serialisering (kap. 12.10) Skriver og leser hele objekter. Sekvensiell behandling av filen. Filen er ikke lesbar i en editor (tekster vil kunne gjenfinnes blant mye annet).