Föreläsning 14. Filhantering



Relevanta dokument
Föreläsning 14. Träd och filhantering

OOP Objekt-orienterad programmering

Föreläsnings 9 - Exceptions, I/O

Att skriva till och läsa från terminalfönstret

Fördjupad Java. Undantagshantering. Fel

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

DAT043 Objektorienterad Programmering

Input. Programmering. Andra källor

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Lösningar för tenta 2 DAT043,

Språkkonventioner och redigering av tal.

Tentamen , Introduktion till Java, dtaa98, dtea53

Föreläsning 9-10 Innehåll

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Lösningsförslag till tentamen

OOP Objekt-orienterad programmering

JAVAUTVECKLING LEKTION 7

OOP Objekt-orienterad programmering

Föreläsning 13. Träd

Algoritmer. Två gränssnitt

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Lösningsförslag till exempeltenta 1

Länkade strukturer, parametriserade typer och undantag

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Obligatorisk uppgift: Banksystem

"if"-satsen. Inledande programmering med C# (1DV402)

Programmering för språkteknologer II, HT2011. Rum

OOP Objekt-orienterad programmering

Föreläsning 7. Träd och binära sökträd

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

F4. programmeringsteknik och Matlab

Tentamen FYTA11 Javaprogrammering

Objektorienterad programmering i Java

Lösningsförslag till tentamen

Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Kompilera och exekvera Javakod

System.out.println("Jaså du har "+ antaldollar + " stycken.");

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

Menyvalen som alltid är numeriska presenteras omgivet av parenteser.

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Testning och felhantering

Tentamen, EDAA20/EDA501 Programmering

F10 - Exceptions. ID1004 Objektorienterad programmering Fredrik Kilander

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen, EDAA10 Programmering i Java

Föreläsning 3-4 Innehåll

Objektorienterad programmering

Föreläsning 1 & 2 INTRODUKTION

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Del A (obligatorisk för alla)

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Föreläsning 3. Stack

Lösningsförslag till tentamen

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Föreläsning 3. Stack

Kap J 7-1 Mer om arv. (superklass) (subklass)

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Algoritmer och datastrukturer 2012, föreläsning 6

SMD 134 Objektorienterad programmering

Del A (obligatorisk för alla)

Tentamen OOP

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Programmering för språkteknologer I, VT2012. Rum

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Tentamen. Lösningsförslag

Transkript:

Föreläsning 14 Filhantering

Filhantering Att hantera filer, dvs att läsa eller skriva data till en fil är en viktig del i de flesta program. Ur Javas synvinkel är filer objekt med egenskaper och metoder precis som vilka andra objekt. Bland en fils egenskaper finns dess namn och dess plats i sekundärminnet. Platsen ges av sökvägen: - /home/sanders/book/ch8-examples/fish.java (Linux) - C:\Windows\Desktop\book\ch8-examples\Fish.java (Windows) Båda dessa sökvägar anger platsen för en fil kallad Fish.java. I Java finns klassen File vars objekt sammanlänkar program med fysiska filer. Till File-klassen finns många metoder (se Java API). 2

Klassen File Detta exempel visar hur ett Fileobjekt skapas med ett filnamn. Med metoderna getname och getpath kan vi komma åt filens namn och plats. OBS! Fileobjektet är bara en länk mellan programmet och den fysiska filen. Resultat efter testkörning. 3

Läsa från fil När man läser från tangentbordet skapar man ett Scanner-objekt enligt: Scanner scanner = new Scanner(System.in); System.in är ett objekt som motsvarar tangentbordet. På samma sätt motsvarar File-objekt filer. När man läser från en fil med filnamn fn skapar man ett Scanner-objekt enligt nedan: Scanner scanner = new Scanner(new File(fn)); Att använda Scanner-objekt till att läsa från filer fungerar ungefär på samma sätt som att använda Scanner-objekt till att läsa från tangentbordet. 4

Läsa från fil Skillnaden mellan att läsa från en fil och från tangentbordet är att: - filen kanske inte existerar - filen existerar men finns i fel katalog - filen finns i rätt katalog men användaren har skrivit in namnet inkorrekt - filen finns i rätt katalog och är rätt inskriven av användaren, men användaren har inte rättighet att läsa den Dessutom kan man inte kompilera satsen: Scanner scanner = new Scanner(new File(fn)); Man får följande felmeddelande: Unhandled exception type FileNotFoundException FileNotFoundException tillhör de undantag som måste tas om hand. 5

En del av Javas Exception-hierarki Throwable Error Exception ClassNotFoundException IOException RuntimeException FileNotFoundException IndexOutOfBoundsException NullPointerException ArrayIndexOutOfBoundsException NoSuchElementException InputMismatchException 6

import java.io.*; import java.util.*; Läsa från fil public class TestIO { public TestIO() throws FileNotFoundException { System.out.println("Enter a file name: "); Scanner kbd = new Scanner(System.in); String fn = kbd.next(); Scanner file = new Scanner(new File(fn)); System.out.println(file.nextLine()); file.close(); Alternativ 1: Lägg till throws. Scanner-object kopplat till tangentbordet Scanner-object kopplat till fil public static void main(string [] args) throws FileNotFoundException { new TestIO(); 7

import java.io.*; import java.util.*; Läsa från fil public class TestRead { public TestRead() { System.out.println("Enter a file name: "); Scanner kbd = new Scanner(System.in); String fn = kbd.next(); try { Scanner file = new Scanner(new File(fn)); System.out.println(file.nextLine()); file.close(); catch(filenotfoundexception fnfe) { System.out.println("Can't open file"); public static void main(string [] args) { new TestRead(); Alternativ 2: Omslut med try/catch. 8

import java.io.*; import java.util.*; Skriva till fil public class TestWrite { public TestWrite() { System.out.println("Enter a file name: "); Scanner kbd = new Scanner(System.in); String fn = kbd.next(); try { PrintWriter file = new PrintWriter(new File(fn)); file.println("hoppsan"); file.close(); catch(filenotfoundexception fnfe) { System.out.println("Can't open file"); public static void main(string [] args) { new TestWrite(); PrintWriter har samma metoder som System.out 9

Tillämpning Använd metoden //Pre: true //Post: resultat = sant om program har balanserade //parentespar (), {, [], annars falskt public boolean isbalanced(string program) för att kontrollera om ett java-program har balanserade parentespar. Låt användaren skriva in namnet på filen. Läs hela filen och lägg innehållet i en sträng med metoden //Pre: true //Post: resultat = en sträng med innehållet i filen som //Scanner-objektet sc är kopplat till public String file2string(scanner sc) 10

Tillämpning //Pre: true //Post: resultat = en sträng med innehållet i filen //som Scanner-objektet är kopplat till public String file2string(scanner sc) { boolean cont = true; String str = ""; while (cont) { try { str += sc.nextline(); catch (NoSuchElementException e) { System.out.println("End of file"); cont = false; return str; 11

Tillämpning public Test() { StackApp stackapp = new StackApp(); System.out.println("Enter a file name: "); Scanner kbd = new Scanner(System.in); String fn = kbd.next(); try { Scanner file = new Scanner(new File(fn)); String str = file2string(file); if (stackapp.isbalanced(str)) System.out.println("Parenteserna är balanserade"); else System.out.println("Parenteserna är inte balanserade"); file.close(); catch(filenotfoundexception fnfe) { System.out.println("Can't open file"); 12

Binära sökträd till fil Hur kan man spara undan ett binärt sökträd på en fil för att man senare ska kunna återskapa trädet till dess ursprungsskick? Studera igen exemplet med vad som händer vid insättning i binära sökträd (se nästa bild). Vi kan konstatera att ordningen på talen spelar roll för det utseende trädet kommer att få. Dock kan vi se att trädet kan återskapas om vi sätter in talen i den följd som fås då ursprungsträdet skrivs ut i preorder. Detta kan vi utnyttja då vi vill skriva ut trädet på fil: skriv ut det i preorder, då kan vi med lätthet återskapa det igen genom att läsa in talen i ordning och sätta in dem i ett nytt träd. 13

Insättning i ett binärt sökträd Antag att vi vill sätta in talen 7, 10, 1, 0, -3, 45, 15, 8 i den ordning de anges i ett binärt sökträd. Hur går vi då till väga? Börja med ett tomt träd och lägg 7 i rotnoden. Tag sedan 10 och då 10 > 7 sätts 10 in som högerbarnnod till 7. Fortsätt på samma sätt med resten av talen. Vad händer om talen i talföljden byter ordning? 7 START 1 10 0 8 45-3 15 Preorder: 7, 1, 0, -3, 10, 8, 45, 15 Inorder: -3, 0, 1, 7, 8, 10, 15, 45 Postorder: -3, 0, 1, 8, 15, 45, 10, 7 14