Filer i Java

Tags:    java
Skrevet af Bruger #173 @ 16.06.2001
Arbejd med filer

Hvordan arbejder man med filer i Java? Det vil denne artikel give et svar på. Der er dog mange flere metoder og ting man kan lave med filer end der er skrevet om i denne artikel, men jeg giver en introduktion og lidt viden til at arbejde med.

Fil objekterne

Man kan lave et fil-objekt med sætningen:
File minFil = new File("C:/dokumenter/fil.txt");
File-klassen findes i pakken java.io, hvor alle klasser omhandlende filer og så videre befinder sig. Brug altid tegnet '/', da det bruges i Linux, og det kan også sagtens bruges i Windows (Du kan bruge tegnet '', hvis det er til Windows, men husk da at skrive '\\'). Du kan lave et fil-objekt på flere måder. Der er tre constructor, og her er den constructor, vi brugte:
File(String pathname)
Det vil sige, at vi bare skal sende en streng til constructoren, som er stien til filen. Enkelt nok. Vi kan også lave en mappe med sætningen:
File minMappe = new File("C:/dokumenter/mappen");
Her laver vi en mappe istedet for en fil med samme constructor, som vi lavede filen med. Det vil sige at et File objekt både kan være en fil og en mappe. Vi kan også kombinere mappen med filen, så der kommer et nyt File-objekt ud af det. Det kan gøres som her vist:
File mappe = new File("c:/dokumenter/java");  // laver mappen
File fil = new File(mappe, "Fil.java");       // laver filen i mappen
Her sender vi File-objektet mappe som den første parameter i contructoren til det nye File-objekt, som er en fil, der befinder sig i mappen "c:\\dokumenter\\java" i Windows. Den sidste contructor accepterer to tekst-strenge: én, der angiver mappen, og én, der angiver filen.

File klassens metoder

Der er flere forskellige metoder at gøre brug af med File-objekterne. Her er nogle af dem, der bruges til at tjekke filer for:

  1. boolean exists()
  2. boolean isDirectory()
  3. boolean canWrite() - kan man skrive til filen?
  4. boolean equals() - er stien den samme?


Du kan forhåbentlig gætte, hvad hver af disse metoder gør. Et eksempel kunne være:
File fil = new File("C:/dokumenter/readme.txt");
System.out.println(fil.exists());
Her printer vi "true" hvis filen eksisterer, ellers "false". Her er nogle af de metoder i File-klassen, som returnerer en tekst-streng med information om det pågældende File-objekt:

  1. String getName() - returnerer kun selve filens navn uden mapperne eller drevet
  2. String getPath() - returnerer stien uden drevet
  3. File[] listFiles() - returnerer et array af File-objekter. Hvis File-objektet er en fil vil metoden returnere null, ellers vilden returnere alle filer og mapper i det pågældende bibliotek.
  4. long length() - returnerer størrelsen i bytes


Vi vil nu lave et lille program, der spytter information ud om filerne i et givent bibliotek. Her er koden:
import java.io.*;

public class Filer {
  public static void main(String[] args) {
    File mappe = new File("c:/dokumenter/java");
    if (!mappe.isDirectory()) {
      System.out.println(mappe + " er ikke en mappe");
      return;
    }
    File[] filerne = mappe.listFiles();  // alle filerne i mappen
    
    if (filerne != null) {
      System.out.println("Der er " + filerne.length +
                         " filer i denne mappe. De er:");
      // gennemløber alle filerne (og mapperne):
      for(int i = 0; i < filerne.length; i++) {   
        System.out.print("Type: ");
        if (filerne[i].isDirectory()) 
          System.out.print("Mappe ");
        else
          System.out.print("Fil   ");
        System.out.print("Bytes: " + filerne[i].length()); 
        System.out.println("\\t" + filerne[i]);        
      }
    }
  }
}
Du kan selv vælge hvilken mappe programmet skal tage fra. Det, der vises på skærmen er ikke det flotteste, der er set. Det kan ændres, men det vil vi ikke gøre nu. Eksemplet viser noget information om de filer, der befinder sig i den mappe, som er angivet. Hvordan kan man så ændre i filer og hurtigt lave nye filer og mapper. Ja, det kommer vi til nu. Her er vist nogle metoder igen fra File-klassen:

  1. boolean renameTo(File path) - ændrer den fysiske fil - ikke File-objektet i dit program
  2. boolean mkdir() - laver den mappe, som det File-objekt, der kalder denne metodes sti angiver
  3. boolean mkdirs() - det samme som ovenover, undtagen det at den laver alle de under-mapper som stien angiver
  4. boolean delete() - sletter den fil eller mappe File-objektets sti angiver


Ja, det var det. Jeg vil anbefale at du kigger klassen File igennem; det finder du andre nyttige metoder til filbehandling. Du kan også kigge lidt i pakken java.io - der finder du også File-klassen - hvor der er andre klasser til filbehandling og lignende. Vi har endnu ikke fået at vide hvordan man læser og skriver til filer; det må vente til en anden god gang, men held og lykke med filerne!


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #831 @ 21.01.03 23:14
Der lærte jeg noget, jeg glæder mig til fortsættelsen.
Nils W
User
Bruger #2730 @ 11.02.03 12:46
Ahhh... synes du springer lidt hårdt ud i det. Synes måske lidt baggrundsviden ville være på sin plads, som fx. logiske filer og fysiske filer. Samt gennemgang af hvad der sker i koden, isteder for bare at gengive hvad der står i Java dokumentationen.
Du skal være logget ind for at skrive en kommentar.
t