You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Lesing fra fil

For å lese fra en fil, kan du instansiere et FileReader-objekt og gi det til en Scanner:

Scanner inFile = new Scanner(new FileReader(filepath));

Konstruktøren til FileReader kaster et sjekket untak: FileNotFoundException hvis filen av en eller annen grunn ikke kan åpnes. Dette kan være fordi filen ikke finnes, fordi det ikke er en fil (men en mappe) eller fordi programmet ikke har tilgang til å åpne filen.

Se java.util.Scanner for hvordan man bruker Scanneren du får.

Skriving til fil

For å lese fra en fil, kan du instansiere en java.io.PrintWriter:

PrintWriter file = new PrintWriter(filepath);

Filen på stien filepath vil hvis den finnes, tømmes for innhold, eller opprettes hvis den ikke finnes. Mappen filen skal ligge må allerede finnes.

Konstruktøren til PrintWriter kaster et unntak: FileNotFoundException. Dette sker hvis mappen som filen skal ligge i ikke finnes og når programmet ikke får skrivetilgang. Untaket er sjekket, så det må fanges, eller så må metoden man instansierer PrintWriter i deklarere throws FileNotFoundException. Dette vil Eclipse hjelpe deg med.

Et PrintWriter-objekt har har metodene print og println som oppfører seg slik man er vandt med System.out.print og System.out.println.

Når du vil si deg ferdig med å skrive til filen, har PrintWriter en close()-metode som fullfører eventuell utsatt skriving og lukker filen.

Filnavn

Filnavnet/stien vil være relativt til 'parrent working directory', som i Eclipse er mappen til prosjektet som main-metoden ligger i (med mindre du har satt det til noe annet). Dette vil si at hvis Eclipse sitt workspace ligger i hjemmemappen din og heter 'workspace', og du jobber i prosjektet 'TDT4100', og du sier new PrintWriter("hei.txt"), vil denne filen dukke opp i mappen TDT4100 i workspace i hjemmemappen din.

Du kan gi PrintWriter en sti i stedet for bare filnavnet, slik at du styrer hvilken mappe filen dukker opp i. Her er det litt forsjell på hvordan stier oppgis i Windows i motsettning til andre operativsystemer som OS X, Linux, o.l. Windows og andre bruker \ og / henholdsvis for å separere mapper og filnavn.

For å skrive til filen hei.txt i mappen output i prosjektmappen, blir stien på Windows "output\hei.txt", mens den ellers blir "output/hei.txt". Legg merke til at \ har spessiel betydning i Java-strenger, og må escapes med en til \. For Windows, vil det alså se ut som new PrintWriter("output\\hei.txt");

Hvis du ikke ønsker at stien skal være relativ, kan du spesifiere en absolutt sti. Absolutte stier begynner med en skråstrek. I Windows kan man også spesifiere hvilken diskstasjon stien omhandler:

OSEksempel
Windows

C:/Users/blabla/test.txt

OS X, Linux, ol.

/User/blabla/test.txt
/home/blabla/test.txt

Eksempler

Lese fra fil:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

class ReadingAFile {
    public static void main(String[] args)
    {
        Scanner in;
        try
        {
            in = new Scanner(new FileReader("test.txt"));
            
            while(in.hasNext()){
                String line = in.nextLine();
                System.out.println(line);
            }
            
            in.close();
        }
        catch (FileNotFoundException e)
        {
            System.err.println("Error: file 'test.txt' could not be opened. Does it exist?");
            System.exit(1);
        }
    }
}

Skrive til fil:

import java.io.FileNotFoundException;
import java.io.PrintWriter;

class WritingAFile {
    public static void main(String[] args)
    {
        try
        {
            PrintWriter outFile = new PrintWriter("test.txt");
            outFile.println("hello world!");
            outFile.close();
        }
        catch (FileNotFoundException e)
        {
            System.err.println("Error: file 'test.txt' could not be opened for writing.");
            System.exit(1);
        }
        
    }
}
  • No labels