INF Notat om I/O i Java

Like dokumenter
IN Notat om I/O i Java

INF1000-SIKT - Notat om I/O i Java

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

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

Leksjon 7. Filer og unntak

INF Løsning på seminaropppgaver til uke 8

Å lese tall fra en fil, klassen Scanner

Leksjon 7. Filer og unntak

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

Jentetreff INF1000 Debugging i Java

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

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

Leksjon 7. Filer og unntak

Løse reelle problemer

Læreboken på 45 minutter

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

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

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

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

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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

Litt om pakker og mest om data inn og ut

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

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

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

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

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

Løse reelle problemer

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

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

Fra Python til Java, del 2

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

UNIVERSITETET I OSLO

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

INF1000 : Forelesning 5

Seminaroppgaver IN1010, uke 2

Repetisjon. INF gruppe 13

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

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

UNIVERSITETET I OSLO

INF1000: Forelesning 4. Mer om arrayer Metoder

Forelesning inf Java 3

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

Kapittel 14: Filer og strømmer. Kort versjon

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

Eksempel: Body Mass Index (BMI)

Avdeling for ingeniørutdanning Institutt for teknologi

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

Mer objektorientert programmering

INF100 Institutt for informatikk Universitetet i Bergen Øving 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.

Forelesning inf Java 5

Forelesning inf Java 5

TOD063 Datastrukturer og algoritmer

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo

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

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

INF1010 våren Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

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

Forelesning inf Java 5

Algoritmer og datastrukturer A.1 BitInputStream

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

Løsningsforslag til eksamen i INF1000 våren 2006

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

INF Uke 10. Ukesoppgaver oktober 2012

INF2100. Oppgaver 26. september til 1. oktober 2007

Forelesning inf Java 3

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

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

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

Oblig4 - forklaringer. Arne og Ole Christian

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

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

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Variabler, input og beslutninger

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

UNIVERSITETET I OSLO

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

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

INF1000 Prøveeksamen Oppgave 7 og 9

INF1000: noen avsluttende ord

Input og beslutninger

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Transkript:

INF1000 - Notat om I/O i Java Tuva Kristine Thoresen, Ingrid Grønlie Guren tuvakt@ulrik.uio.no, ingridgg@ulrik.uio.no 22. oktober 2014 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: import java.util.scanner; 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. 1

Denne metoden kan brukes på følgende måte: System.out.println("Tast inn en setning:"); 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: int heltall = Integer.parseInt(linje); 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:"); int heltall = Integer.parseInt(linje); 1.3 Eksempelprogram Nå skal vi lage et lite program som leser inn en setning, et heltall og et desimaltall fra brukeren. import java.util.scanner; 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:"); int heltall = Integer.parseInt(linje); 2

// leser inn et desimaltall: System.out.println("Tast inn et desimaltall:"); String tekst = in.nextline(); double desimaltall = Double.parseDouble(tekst); 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: import java.util.scanner; import java.io.*; 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"; File fil = new File(filnavn); Scanner innfil = new Scanner(fil); 2.1 Exceptions Når vi leser inn en fil, vet ikke Java om filen eksisterer. Derfor er vi nødt til å fortelle hva programmet skal gjøre dersom innlesingen fra fil ikke går. Her bruker vi Exceptions (på norsk: unntak). Hvis en metode skal lese fra fil, må metoden kaste et unntak hvis noe går galt. Dette gjør vi for eksempel slik: public static void main(string[] args) throws Exception { // Kode for innlesing av fil Noen ganger har vi lyst til å skrive en egen metode for å lese inn fra fil. Da er det viktig at denne metoden kaster et unntak: 3

public static void lesfil() throws Exception { // Kode for innlesning av fil Når en metode kaster et unntak er vi helt avhengige av at alle metoder som kaller denne metoden også kaster et unntak. Hvis metoden lesfil() kalles fra main-metoden vår, må vi huske å kaste et unntak der også: public static void main(string[] args) throws Exception { // Metode for innlesing av fil lesfil(); 2.2 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); 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(); 4

3 Skrive til fil For å skrive til fil bruker vi Java-klassen PrintWriter og metoden println: PrintWriter writer = new PrintWriter("utfil.txt"); // skrive til filen writer.println("her er linje 1"); writer.println("og her kommer linje 2"); // lukke filen writer.close(); 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: import java.io.*; Metoden som skriver til fil må kaste et unntak, Exception akkurat slik vi må gjøre når vi skriver til fil: public void skrivtilfil() throws Exception { // Kode for skriving til fil 3.1 Et eksempel I dette eksempelet vil vi skrive alle tall mellom 0 og 9 til en fil. 5

import java.io.*; class Skriveeksempel { public static void main(string[] args) throws Exception { skrivtilfil(); public void skrivtilfil() throws Exception { PrintWriter writer = new PrintWriter("utfil.txt"); // skrive for (int i = 0; i < 10; i++) { writer.println(i); // lukke writer.close(); 6