Filer och IO Input/output Filer Skriva och läsa textfiler Öppna/Skriva

January 9, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Java Programming
Share Embed Donate


Short Description

Download Filer och IO Input/output Filer Skriva och läsa textfiler Öppna/Skriva...

Description

Input/output • Externa data kan tillhandahållas på många sätt i Java : – Via GUI

Filer och IO

– Läsas och skrivas direkt till och från tangentbord och bildskärm – Läsas och skrivas till och från filer – Läsas och skrivas till och från databaser – …

• Java API tillhandahåller paketet java.io – Klasser som stöder input/output” – Klasser för att hantera när I/O-operationer går fel • Typfel • En fil som inte går att hitta/öppna • …

Filer • Filer kan användas för att lagra data permanent mellan programkörningar eller för utbyte av information mellan program. • Textfiler läsbara även för oss (med tex en texteditor) till skillnad från binära filer som lagrar datat mer som i datorns minne.

Skriva och läsa textfiler • Strömmarna betraktas som innehållande värden av typen char • Klasser som hanterar textfiler kallas readers och writers • Tre viktiga åtgärder – Öppna filen – Skriv/läs data – Stäng filen

• Samtliga dessa kan misslyckas – Man måste förutse undantag! 155

Öppna/Skriva/Stänga • Skapa ett FileWriter objekt • En konstruktor tar filnamnet som parameter (String) FileWriter writer = new FileWriter(”testfil.txt”);

• Skriv med metoden write() • Överlagrad, tex. med signaturen write(String str) writer.write("Första raden\n"); • Stäng filen med metoden close() writer.close(); //(Obs stäng ej System.in)

Koppla ihop strömmar • För mer avancerat beteende kan de enkla strömmarna som läser/skriver från något kopplas ihop med mer avancerade strömmar. • Ex: PrintWriter out = new PrintWriter(new FileWriter(“filnamn.txt”)); out.println(“hej”); out.close();

• Strömmar finns bla. för buffring, hantera 157 radnummer, komprimering och kryptering 157

1

Läsa från filer

I/O Streams

• Scanner har en konstruktor som tar ett Fileobjekt som parameter • Alternativt kan man koppla ihop den med en Reader-klass •

File f = new File(“minfil.txt”);



Scanner in = new Scanner(f); //Kastar ett kontrollerat undantag



Scanner in2 = new Scanner(new FileReader(“minfil.txt”));



String str = in2.next();



in2.close();

,QSXW6WUHDPV 2XWSXW6WUHDPV

'DWD 6WUHDPV

3URFHVVLQJ 6WUHDPV

&KDUDFWHU 6WUHDPV %\WH 6WUHDPV

158

Interfaces • Med interface betecknas allmänt de resurser en klass (eller ett objekt) ställer till förfogande • Mängden resurser som kan användas av “andra” • I Java formaliseras detta m h a interfacekonstruktionen • Ett Java interface är en mängd konstanter och abstrakta metoder • En interface lägger på så sätt fast “krav” på de klasser som implementerar interfacet

Interface och Paket

class klassnamn implements interfacenamn { … OBS! Det får finnas flera }

Comparable i Shapes2- exemplet

Interface - exempel Finns i paketet java.lang

public interface Comparable { int compareTo(Object obj); }

public abstract class Figure implements Comparable { private int xPosition; private int yPosition; metoden compareTo private String color; implementeras inte i Figure …

Detta lämnas till de klasser som härleds från Figure protected abstract float getArea(); // Compute and return area of figure

Alla klasser ärver från

Object }

För att ha något att jämföra

2

Ny Square Interface - deklaration

import java.awt.Rectangle; public class Square extends Figure // impl automatiskt Comparable { ... protected float getArea() { return size * size; } public int compareTo(Object obj) { if (this.getArea() < ((Figure) obj).getArea() ) return -1; else if (this.getArea() > ((Figure) obj).getArea() ) return 1; else return 0; }

public interface Interfacename { •konstantdeklarationer •abstrakta metodhuvuden }

}

Interfaces

Interfaces

• Varje interface-implementation är en ny “version” av interfacet • Interface är inga klasser och kan inte instantieras • En klass kan ärva från en klass och dessutom implementera ett eller flera interface • Interface-konstanterna är tillgängliga i den implementerande klassen • En interface kan “ärva” från ett eller flera interface (m h a extends) • En klass som implementerar ett sådan interface måste också implementera alla ärvda metoder

Paket (packages) • Ett Java-paket är en mängd klasser • Paket användas för att gruppera liknande klasser och/eller sådana som beror på varandra • Klasserna i ett paket behöver inte ärva från varandra • Java util är ett paket (java.util) • Java API:n består av många paket • import satsen gör innehållet i ett paket tillgängligt import paketnamn.klassnamn; import paketnamn.*;

enstaka klass alla klasser i paketet

• Varje interface definierar en klasstyp • Interface liknar en superklass för alla klasser som implementerar interfacet !Polymorfi gäller även för interface !Referenser får referera till objekt av en subklass

• Interface-konceptet har många likheter med (multipelt) arv, dock utan dess nackdelar • Multipelt arv finns inte i Java

Paket • Programmeraren kan definiera egna paket package paketnamn;

• Package-satsen måste vara första satsen i ett fil • Alla klasser i filen läggs till det namngivna paketet • Det får bara finnas en package sats i en fil • Paketnamnet motsvarar katalognamnet där klassfilerna finns • Det finns en s k environment variable CLASSPATH som lägger fast var systemet skall leta efter paket • Vid namnkollision måste berörda klasser kvalificeras (specificeras med fullt namn)

3

Skuggning av namn • OBS! Nya deklarationer skuggar giltiga identifierare !Man kommer inte längre åt det skuggade namnet • Kan bli problem om man tex ska göra en klass Rectangle • Använd full kvalificering (kontext + namn) för att komma åt skuggade namn • Exempel (se shapes exemplet): import java.awt.*; public class Rectangle { canvas.fill(new java.awt.Rectangle(…); }

Object Serialization • Object serialization är ett sätt att spara ett objekts tillstånd (tex i en fil) så att vi sedan kan komma åt det även efter att programmet avslutats. • Object serialization åstadkoms mha Serializable interfacet och klasserna ObjectOutputStream och ObjectInputStream • writeObject metoden används för att serializera ett objekt • readObject används för att återskapa objektet

4

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF