Strömmar Vid läsning och skrivning används något som kallas strömmar.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
INTRODUKTION TILL PROGRAMMERING
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Imperativ Programmering
Klassarv och inkapsling
Filhantering Grundprincipen för filhantering Öppna filen
Om Java C =>Java syntax variabler metoder färdiga klasser
Övning5 Så här ska man tänka när man löser uppgift 1 på tentan lite grafik, så här söker man genom en lista så här läser man från en fil i java lösa uppgift.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Föreläsning 5.  Idag  Kap 7 i Dawson  Filer  Felhantering med try…except.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Repetition inför slutprovet
Klasser och objekt Klasser, objekt och instansvariabler
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Objektorienterad Modellering Programmering och Analys
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 14 ”Enkel” Filhantering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 C# I/O Streams C# använder “strömmar” för in- och utmatningsoperationer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Föreläsning 4 Klasser Och Objekt.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Föreläsning 2 2D1312 Introduktion till Python Kap 1 och 2 i kursboken.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 9 Inläsning och utskrift på fil –SimpleTextFileReader –SimpleTextFileWriter Felsökning Java API.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Presentationens avskrift:

Strömmar Vid läsning och skrivning används något som kallas strömmar. En ström är ett flöde av data som strömmar in eller ut från ett program. Man skiljer på inströmmar och utströmmar. En ström har en koppling till en fil, en enhet, eller en kommunikationsförbindelse och används för att skriva eller läsa data till denna koppling

Klassen System Klassen System, i paketet java.lang innehåller tre olika strömmar, definerade som klassvariabler. System.in System.out System.err System.in är ett statiskt objekt av klassen InputStream. System.out och System.err är statiska objekt av klassen PrintStream. Både System.out och System.err brukar vara kopplade mot skärmen, medan System.in brukar vara kopplad mot tangentbordet.

Klassen System Metoden ”read()” är abstrakt eftersom den måste import java.io.*; public final class System { //.. . public static final PrintStream err; public static final InputStream in; public static final PrintStream out; } public abstract class InputStream { //.. . public abstract int read() throws IOException; } Metoden ”read()” är abstrakt eftersom den måste definieras i en subklass som är kopplad till en faktisk kommunikationskanal, i detta fall till tangentbordet.

Java.io, klasser som läser byteströmmar InputStream SequenceInputStream FileInputStream ByteArrayInputStream PipedInputStream FilterInputStream DataInputStream PushBackInputStream BufferedInputStream

Några metoder i Inputstream Metoder som läser ett byte eller ett fält av byten abstract int read() throws IOExeption OBS! Abstrakt metod. Läser nästa byte och returnerar det som en int. int read(byte[] b) throws IOExeption Läser ett antal byte till vektorn ”b”. Antalet lästa bytes returneras. int read(byte[] b, int off, int len) throws IOExeption Läser ett antal byte till fältet ”b”. Första byte läggs i ”b[off]”. Maximalt läses ”len” stycken bytes. Antalet lästa bytes returneras.

Java.io, klasser som skriver byteströmmar OutputStream FileOutputStream ByteArrayOutputStream PipedOutputStream FilterOutputStream DataOutputStream PrintStream BufferedOutputStream

Några metoder i Outputstream Metoder som skriver ett byte eller ett fält av byten i outputstream abstract void write(int b) throws IOExeption OBS! Abstrakt metod. Skriver byte ”b” till utströmmen void write(byte[] b) throws IOExeption Skriver ”b.length” byte från vektorn ”b” void write(byte[] b, int off, int len) throws IOExeption Skriver ett antal byte till fältet ”b”. Första byte som skrivs är ”b[off]”. Totalt skrivs ”len” stycken bytes.

Ett exempel med read() och write() import java.io.*; public class EnklaTecken { public static void main(String[] argument) throws IOException while ((lästTecken = System.in.read()) >= 0) System.out.write(lästTecken) ; } Utskrift Hur fungerar detta? Vad ska jag nu skriva.. . Avsluta med <Ctrl-Z>

Java.io, klassen PrintStream OutputStream FileOutputStream ByteArrayOutputStream PipedOutputStream FilterOutputStream DataOutputStream PrintStream BufferedOutputStream

Några metoder i klassen PrintStream Några metoder i Klassen PrintStream: Metoder som skriver ett objekt eller variabel av angiven typ till utströmmen print(Object), print(String), print(char[]), print(char), print(int), print(long), print(float), print(double), print(bolean) Metoder som skriver ett objekt eller variabel av angiven typ till utströmmen och avslutar med ett nyradstecken println(Object), println(String), println(char[]), println(char), println(int), println(long), println(float), println(double), println(bolean) Exempel System.out.print(”Vad heter du: ”); System.out.flush(); Strängen skrivs inte ut direkt utan mellanlagras i en utdatabuffert. Bufferten kan tömmas med hjälp av metoden flush. Funktionen println flushar bufferten automatiskt.

Ett exempel på läsning från System.in import java.io.*; public class Exempel { static int ettTal; static char ettTecken; public static void main(String[] argument) System.out.print("Skriv ett tecken: "); System.out.flush(); ettTal = System.in.read(); System.out.println("Du skrev ett: " + ettTecken); } Utskrift Skriv ett tecken: q Du skrev ett: q

Inläsning Data som skrivs på tangentbordet hamnar i strömmen System.in som är ett objekt av InputStream i paketet java.io. Det går inte att direkt läsa från System.in utan den strömmen måste kopplas till en annan ström. I jdk 1.2 går det dock. BufferedReader MinaInData = new BufferedReader( new InputStreamReader(System.in)); I klassen BufferedReader finns en metoden readLine. System.in (InputStream) (InputStreamReader) MinaInData (BufferedReader)

Ett exempel på inläsning av en hel rad import java.io.*; public class Rad { public static void main(String[] argument) throws IOException BufferedReader MinaInData = new BufferedReader(new InputStreamReader(System.in)); String namnet; System.out.print("Vad heter du: "); System.out.flush(); namnet = MinaInData.readLine(); System.out.println("Hej, " + namnet + "!"); } Exempel på exekvering ==> java Rad Vad heter du: Hans-Edy Mårtensson Hej, Hans-Edy Mårtensson! ==>

Java.io, klasser som läser teckenströmmar Reader PipedReader InputStreamReader CharArrayReader FileReader BufferedReader FilterReader StringReader LineNumberReader PushbackReader

Java.io, klasser som skriver teckenströmmar Writer OutputStreamWriter BufferedWriter FileWriter PipedWriter FilterWriter CharArrayWriter PrintWriter StringWriter

Textfiler För att läsa eller skriva en fil skall man i Java koppla en ström till filen. Om man skall hantera binära data så väljer man lämpliga subklasser från superklassena InputStream eller OutputStream. Om man skall hantera tecken så väljer man lämpliga subklasser från superklassena Reader eller Writer. Om man vill koppla en fil till en teckenström kan man använda klasserna FileReader eller FileWriter. I programmet bör man inte läsa direkt från en ström av klassen FileReader, utan i stället via BufferedReader. På liknade sätt använder man klasserna BufferedWriter och FileWriter vid skrivning till en textfil. För att få tillgång till metoderna print och println så kan man först låta sin teckenström passera PrintWriter.

Ett exempel på access av textfiler, del 1 import java.io.*; public class Kopiera { public static void main(String[] argument) throws IOException, FileNotFoundException //Vi skapar en indataström från tangentbordet BufferedReader inStrom = new BufferedReader( new InputStreamReader(System.in)); //Vi skapar en teckenström från den fil som ska //kopieras System.out.print("Infilens namn? : "); System.out.flush(); String filNamnet = inStrom.readLine(); BufferedReader inFil = new BufferedReader(new FileReader(filNamnet)); //Vi skapar en teckenström till den nya kopian System.out.print("Utfilens namn? : "); filNamnet = inStrom.readLine(); PrintWriter utFil = new PrintWriter( new BufferedWriter(new FileWriter(filNamnet))); //Programmet forsätter på nästa sida

Ett exempel på access av textfiler, del 2 //Och nu kopierar vi den ena filen till den andra int n = 0; while (true) { String rad = inFil.readLine(); if (rad == null) break; utFil.println(rad); n++; } utFil.close(); inFil.close(); System.out.println(n + " rader kopierade");

Inläsning av tal Tyvärr så innehåller inte klassen BufferedReader metoder för att omvandla till strängar till numeriska data. Det finns flera olika tekniker för att omvandla en sträng till ett tal. Ett sätt beskrivs här nedan. Omvandlingen kan ske med hjälp av de primitiva datatypernas omslagsklasser (wrappers). String textRad = minaInData.readLine(); int mittHeltal = Integer.parseInt(textRad); I det ovanstående exemplet används metoden parseInt i omslagsklassen Integer för att omvandla strängen textRad till motsvarande heltal. För att omvandla ett sträng till motsvarande decimaltal måste man gå tillväga på ett något annorlunda sätt. String textRad = minaInData.readLine(); int mittDecimaltal = Double.valueOf(textRad).doubleValue();

Ett exempel på inläsning av tal import java.io.*; public class Tal { public static void main(String[] argument) throws IOException BufferedReader MinaInData = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Skriv ett heltal: "); System.out.flush(); String textRad = MinaInData.readLine(); textRad = textRad.trim(); //Rensar bort blanktecken int helTalet = Integer.parseInt(textRad); System.out.println("Heltalet är: " + helTalet); System.out.print("Skriv ett decimaltal: "); textRad = MinaInData.readLine(); textRad = textRad.trim(); double decimalTalet = Double.valueOf(textRad).doubleValue(); System.out.println("Decimaltalet är: " + decimalTalet); }