Korzystanie z interfejsu API systemu plików

Wtyczka org.eclipse.core.filesystem udostępnia ogólny interfejs API do interakcji z dowolnym systemem plików. Interfejs ten przypomina java.io.File, ale występuje kilka kluczowych różnic między tymi interfejsami:

Ścieżka do pliku jest w interfejsie API systemu plików reprezentowana w formie hierarchicznej struktury java.net.URI. Ten schemat URI reprezentuje rodzaj systemu plików, zaś komponent ścieżki URI reprezentuje położenie pliku w drzewie systemu plików. Tak więc dowolna hierarchiczna struktura URI reprezentuje potencjalny plik lub katalog w jakimś systemie plików.

Interfejs API do pracy z plikami i systemami plików można znaleźć w pakiecie org.eclipse.core.filesystem. Centralnym typem interfejsu API jest typ IFileStore. Każda instancja IFileStore reprezentuje pojedynczy plik w systemie plików. Podobnie jak w przypadku IResource, istnienie instancji IFileStore nie oznacza, że plik istnieje na dysku. Instancji IFileStore można użyć do tworzenia, usuwania, kopiowania, przenoszenia plików lub otwierania strumieni plików. Dla danej struktury URI można uzyskać dostęp do instancji IFileStore przy użyciu metody statycznej EFS.getStore(URI).

Interfejsu IFileSystem można użyć do uzyskania ogólnych informacji o systemie plików. Każda instancja IFileSystem reprezentuje pojedynczy schemat URI, na przykład "file:", "ftp:" itp. Typu tego można użyć, aby uzyskać odpowiedź na pytania typu: jakie są obsługiwane atrybuty plików, czy system plików rozróżnia wielkie i małe litery itp. Można go też użyć, aby uzyskać dostęp do typu IFileStore dla danego schematu URI.

Większość metod typu IFileStore ma parametr flag, który umożliwia podanie dodatkowych opcji. Wartości flag można znaleźć w klasie EFS. Aby na przykład otworzyć strumien wyjściowy umożliwiający dopisywanie do pliku, należy użyć:

	IFileStore store = ...//jakaś składnica plików
	store.openOutputStream(EFS.APPEND, null);

Aby skorzystać z domyślnego zachowania metody, należy użyć parametru EFS.NONE.

Interfejs IFileInfo reprezentuje stan pliku w danej chwili. Można za jego pomocą dowiedzieć się, czy plik istnieje, czy jest katalogiem, jakie ma atrybuty itp. Te informacje można następnie zmodyfikować i przekazać z powrotem do pliku. Poniższy przykładowy fragment kodu nadaje katalogowi atrybut "tylko do odczytu":

	IFileStore store = ...//jakaś składnica plików
	IFileInfo info = store.fetchInfo();
	if (info.exists() && info.isDirectory()) {
		info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true);
		store.putInfo(info, EFS.SET_ATTRIBUTES, null);
	}

Taki styl interfejsu API umożliwia uzyskanie informacji o pliku oraz ich zmianę przez użycie pojedynczego wywołania do systemu plików. W powyższym przykładzie użyto tylko jednego wywołania systemu plików do pobrania informacji. Można następnie wykonać dowolną liczbę operacji na obiekcie IFileInfo bez ponownego dostępu do dysku.

Klasa EFS oferuje statyczne metody fabryczne do uzyskiwania instancji IFileStore oraz IFileSystem, a także różnych stałych opcji i kodów błędów.