IN Notat om I/O i Java

Like dokumenter
INF Notat om I/O i Java

INF1000-SIKT - Notat om I/O i Java

INF1010 våren 2018 tirsdag 23. januar

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

Enkel lesing og skriving i Java

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

Jentetreff INF1000 Debugging i Java

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak

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

Å lese tall fra en fil, klassen Scanner

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

Seminaroppgaver IN1010, uke 2

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

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

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

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

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.

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

Leksjon 7. Filer og unntak

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

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

Repetisjon. INF gruppe 13

TOD063 Datastrukturer og algoritmer

Litt om pakker og mest om data inn og ut

Fra Python til Java, del 2

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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

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

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

UNIVERSITETET I OSLO

String-manipulasjon og I/O i Java. INF1000 h14 - Hans Petter Taugbøl Kragset

Løse reelle problemer

INF Løsning på seminaropppgaver til uke 8

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

IN Seminaroppgaver til uke 11

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

INF1000 : Forelesning 5

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

INF1000: Forelesning 4. Mer om arrayer Metoder

Forelesning inf Java 5

Forelesning inf Java 5

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

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

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

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

Løsningsforslag til eksamen i INF1000 våren 2006

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

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 14: Filer og strømmer. Kort versjon

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

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

Løse reelle problemer

Læreboken på 45 minutter

Eksempel: Body Mass Index (BMI)

Forelesning inf Java 5

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

Programmering Høst 2017

Endret litt som ukeoppgave i INF1010 våren 2004

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

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

UNIVERSITETET I OSLO

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

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1000 (Uke 6) Mer om metoder, tekster

Forelesning inf Java 3

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Mer objektorientert programmering

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Blokker og metoder INF1000 (Uke 6) Metoder

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

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

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

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

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

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

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

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF1010 våren Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling)

INF2100. Oppgaver 26. september til 1. oktober 2007

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

Forelesning inf Java 3

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

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

INF Uke 10. Ukesoppgaver oktober 2012

Algoritmer og datastrukturer A.1 BitInputStream

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

Java 6. Eksempel med to-dimensjonal array Filbehandling Tekster

Transkript:

IN1010 - Notat om I/O i Java Mathias J.P. Stang, Tuva Kristine Thoresen, Ingrid Grønlie Guren 17. januar 2018 Dette notatet handler om I/O (input/output) i Java, og tar for seg innlesning fra terminal, lesing fra fil og skriving til fil. 1 Innlesning fra terminal Innlesing fra terminal bruker vi ofte i interaksjon med brukere av programmet. Programmet ber om input, som brukeren så taster inn. Programmet må deretter lese inn det som blir skrevet og bearbeide informasjonen. For å få til innlesning fra terminal bruker vi en ferdiglaget Java-klasse som heter Scanner. Denne klassen inneholder mange nyttige funksjoner for innlesning. For å bruke denne klassen må vi først importere de nødvendige programmene. Disse ligger i java.util og kan importeres på følgende måte: Neste steg er å opprette et innlesningsobjekt. Det må vi gjøre slik at vi får tak i hele Scanner-klassen og dens funksjonaliteter. Dette gjøres slik: Scanner in = new Scanner(System.in); Når vi leser fra terminalen leser vi fra standard input. Dette får vi tak i gjennom System.in. Legg merke til at dette er nesten helt likt som når vi printer til terminalen, nemlig med System.out. 1.1 Innlesning av tekst Scanner har en metode som vi bruker for å lese inn tekst: nextline() - leser inn en linje av tekst. Denne metoden kan brukes på følgende måte: System.out.println("Tast inn en setning:"); 1

1.2 Innlesning av tall For å lese inn tall med Scanner leser vi først inn en linje, slik vi gjør når vi leser inn tekst. Så konverterer vi denne linja til et tall. Dette kan skje på følgende måte: Her konverterer vi teksten linje til et heltall ved kall på metoden Integer.parseInt(). Denne metoden tar en tekst som inneholder et tall (for eksempel "4") som input og konverterer denne til et heltall (her med verdi 4). På tilsvarende måte kan man konvertere en tekst til et desmialtall, med metoden Double.parseDouble(). Eksempel på innlesning av heltall: System.out.println("Tast inn et heltall:"); 1.3 Eksempelprogram Nå skal vi lage et lite program som leser inn en setning, et heltall og et desimaltall fra brukeren. class InputAlt { public static void main(string[] args) { // oppretter innlesningsobjekt: Scanner in = new Scanner(System.in); // leser inn en setning System.out.println("Tast inn ditt fulle navn:"); String navn = in.nextline(); // leser inn et heltall: System.out.println("Tast inn et heltall:"); // leser inn et desimaltall: System.out.println("Tast inn et desimaltall:"); String tekst = in.nextline(); double desimaltall = Double.parseDouble(tekst); 2

2 Innlesning fra fil Når vi leser inn fra terminalen med Scanner leser vi fra System.in. For å lese inn fra fil, kan vi også bruke Scanner. Forskjellen er at nå må vi sende med filen som argument til Scanner. Det er dessverre noen små problemer med å lese fra fil. Vi har nemlig ingen garanti for at filen vi prøver å lese fra, faktisk finnes! Java lar oss løse dette ved at vi først prøver å lese fra filen. Hvis dette går galt, får vi en feilmelding som vi må håndtere. Vi må først huske å importere de nødvendige programmene: og så kan vi begynne å lese. Vi oppretter først et innlesningsobjekt, og forteller det at det skal lese fra filen innfil.txt: String filnavn = "innfil.txt"; Scanner innfil = null; File fil = new File(filnavn); innfil = new Scanner(fil); catch(filenotfoundexception e) { // Kode som kjøres om filen ikke finnes // du kan bruke innfil her Her ser vi at vi lager et objekt med typen File som sendes som parameter til Scanner. Siden vi ikke vet om filen eksisterer, krever Java at vi forteller hva programmet skal gjøre om filen ikke eksisterer. Her bruker vi Exceptions (på norsk: unntak). Dette er tema senere i semesteret. I begynnelsen holder det å tilpasse kodesnutten gitt ovenfor. Etter catch-blokken kan du bruke Scanner-objektet innfil på vanlig måte. 2.1 Innlesning av en typisk fil Innlesning fra fil fungerer på samme måte som innlesning fra terminal. Vi kan bruke de samme Scanner-metodene for å lese inn informasjon: // Leser inn en linje String linje = innfil.nextline(); // Leser inn et heltall String s = innfil.nextline(); int tall = Integer.parseInt(s); 3

Men, ofte har filer en bestemt struktur som gjentar seg. La oss se på en fil på et slikt format: Ola Tuva Heidi Lars Gunnar Ingrid... Her har vi en fil med flere navn, et navn på hver linje. Vi vet ikke hvor mange linjer fila vår har - hvordan kan vi da lese fra den? Løsningen ligger i en metode i Scanner: hasnextline(): Denne metoden returnerer true hvis det finnes flere linjer i fila, false ellers. For å lese inn hele filen, kan vi da gjøre følgende: while (innfil.hasnextline()) { String linje = innfil.nextline(); 3 Skrive til fil For å skrive til fil bruker vi Java-klassen PrintWriter og metoden println: PrintWriter writer = new PrintWriter("utfil.txt"); Som med new File, kan PrintWriter kaste unntak, som gjør at vi må skrive dette slik: PrintWriter writer = null; writer = new PrintWriter("utfil.txt"); catch(filenotfoundexception e) { // kode som kjøres om filen ikke finnes/ikke kan opprettes // skrive til filen writer.println("her er linje 1"); writer.println("og her kommer linje 2"); // lukke filen writer.close(); 4

Her skriver vi til en fil ved navn "utfil.txt". Hvis denne filen ikke finnes fra før, blir den opprettet. Hvis ikke blir det gamle innholdet i filen overskrevet, og ersattet med det nye du skrev. Det er viktig å lukke skriveren når du er ferdig, uten dette blir ikke filen skrevet til. Dette gjør du med metoden writer.close(). PrintWriter må importeres fra java.io: 3.1 Et eksempel I dette eksempelet vil vi skrive alle tall mellom 0 og 9 til en fil. class Skriveeksempel { public static void main(string[] args) { skrivtilfil(); public static void skrivtilfil() { PrintWriter writer = null; writer = new PrintWriter("utfil.txt"); catch(filenotfoundexception e) { // Avslutt programmet om vi ikke kan skrive til filen System.out.println("Kan ikke skrive til filen"); return; // skrive for (int i = 0; i < 10; i++) { writer.println(i); // lukke writer.close(); 5