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. For å skrive til filen hei.txt i mappen 'output' i prosjektmappen, blir stien "output/hei.txt". Eksempelvis, vil det alså se ut som new PrintWriter("output/hei.txt");
Det er også mulig å bruke det spessiele mappenavnet ..
(dobbel dot) til å bety mappen over. For eksempel, vil
få filen til å dukke opp i workspace-mappen utenfor prosjektmappen."../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, vil stien fortsatt være relativ til diskstasjonen 'parent working directory' er på. Men, men kan også spesifiere diskstasjon ved å skrive stasjonsnavnet og kolon foran.
Eksempler på stier:
Sti | Betydning |
---|---|
hei.txt | Fil 'hei.txt' i prosjektmappa. |
output/hei.txt | Fil 'hei.txt' i output-mappa i prosjektmappa. |
../hei.txt | Fil 'hei.txt' i workspace-mappa, én opp fra prosjektmappa. |
/hei.txt | Fil 'hei.txt' i den øverste mappen på filsystemet. For Windows er dette fortsatt på samme diskstasjon. |
C:/hei.txt | Kun på Windows: Fil 'hei.txt' i øverste mappe på diskstasjon C. |
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); } } }