Bruke API for filsystem

Plugin-modulen org.eclipse.core.filesystem har et generisk API for interaksjon med et vilkårlig filsystem. Dette APIet likner på java.io.File, med noen viktige forskjeller:

I APIet for filsystem er banen for en gitt fil representert som en hierarkisk java.net.URI. URI-skjemaet representerer typen filsystem, og URI-banekomponenten representerer filens plassering i filsystemtreet. En gitt hierarkisk URI representerer altså en potensiell fil eller katalog i et vilkårlig filsystem.

API for arbeid med filer og filsystemer finner du i pakken org.eclipse.core.filesystem). Den sentrale API-typen er IFileStore. Hver forekomst av IFileStore representerer en enkelt fil i filsystemet. Som for IResource innebærer ikke eksistensen av en IFileStore-forekomst nødvendigvis at en slik fil finnes på disken. Du kan bruke en IFileStore-forekomst til å opprette, slette, kopiere, flytte eller åpne strømmer på filer. For en gitt URI kan du få tak i en IFileStore-forekomst ved hjelp av den statiske metoden EFS.getStore(URI)

Grensesnittet IFileSystem kan brukes til å finne ut ting om filsystemet som helhet. Hver IFileSystem-forekomst representerer ett enkelt URI-skjema, for eksempel "file:", "ftp:" osv. Du kan bruke denne typen til å stille spørsmål som f.eks. hvilke filattributter som støttes, eller hvorvidt det skilles mellom små og store bokstaver i filsystemet. Du kan også bruke denne typen til å få tak i en IFileStore for en gitt URI.

De fleste metoder på IFileStore har en flaggparameter som gjør det mulig å oppgi flere alternativer. Flaggverdiene finnes i klassen EFS. For eksempel kan du for å åpne en utdatastrøm for å legge til en fil bruke

	IFileStore store = ...//et fillager
	store.openOutputStream(EFS.APPEND, null);

Hvis du ønsker standardvirkemåten for en metode, kan du bruke EFS.NONE.

Grensesnittet IFileInfo representerer tilstanden til en fil et bestemt øyeblikk. Særlig kan du finne ut om filen finnes, om den er en katalog, hva slags attributter den har, osv. Disse opplysningene kan endres og så legges inn i filen. For eksempel har vi her en snutt som definerer leseattributtet for en katalog:

	IFileStore store = ...//et fillager
   IFileInfo info = store.fetchInfo();
	if (info.exists() && info.isDirectory()) {
		info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true);
   store.putInfo(info, EFS.SET_ATTRIBUTES, null);
	}

Denne typen API gjør det mulig for deg å hente og endre filopplysninger med ett enkelt kall til filsystemet. I eksempelet over er det bare ett filsystemkall for å hente opplysningene, og så kan du utføre så mange operasjoner du vil, på IFileInfo-objektet uten å måtte innom disken igjen.

Klassen EFS har statiske factory-metoder for å hente IFileStore- og IFileSystem-forekomster samt forskjellige alternativkonstanter og feilkoder.