Utilizar o API do sistema de ficheiros

O plug-in org.eclipse.core.filesystem faculta um API genérico para interagir com um sistema de ficheiros arbitrário. Este API é semelhante a java.io.File, com algumas diferenças fulcrais:

No API do sistema de ficheiros, o caminho para qualquer ficheiro é representado como um java.net.URI hierárquico. O esquema de URI representa o tipo de sistema de ficheiros e o componente de caminho do URI representa a localização do ficheiro na árvore do sistema de ficheiros. Assim, qualquer URI hierárquico representa um potencial ficheiro ou directório num sistema de ficheiros arbitrário.

O API utilizado para trabalhar com ficheiros e sistemas de ficheiros encontra-se no pacote org.eclipse.core.filesystem). O tipo de API central é IFileStore. Cada instância de IFileStore representa um único ficheiro no sistema de ficheiros. Do mesmo modo que com o IResource, a existência de uma instância IFileStore não significa que esse ficheiro existe no disco. Pode utilizar uma instância IFileStore para criar, eliminar, copiar, mover ou abrir sequências em ficheiros. Para um determinado URI, pode obter uma instância IFileStore através da utilização do método estático EFS.getStore(URI).

A interface IFileSystem pode ser utilizada para obter informações sobre o sistema de ficheiros como um todo. Cada instância IFileSystem representa um único esquema de URI, tal como "file:", "ftp:", etc. Pode utilizar este tipo de interface para colocar questões, tais como quais os atributos suportados ou se um sistema de ficheiros é sensível a maiúsculas e minúsculas. Pode também utilizar este tipo de interface para obter um IFileStore para um determinado URI.

A maioria dos métodos na IFileStore contêm um parâmetro sinalizador que permite o fornecimento de opções adicionais. Os valores do sinalizador podem ser encontrados na classe EFS. Por exemplo, para abrir uma cadeia de saída para anexar a um ficheiro, utilize:

	IFileStore store = ...//some file store
	store.openOutputStream(EFS.APPEND, null);

Se pretender que seja aplicado o comportamento predefinido a um método, utilize EFS.NONE.

A interface IFileInfo representa o estado de um ficheiro num determinado momento. Em particular, pode descobrir se o ficheiro existe, se é um directório, quais são os respectivos atributos e assim por diante. Esta informação pode ser alterada e definido de novo no ficheiro. Por exemplo, em seguida é apresentado um fragmento que define o atributo só de leitura num directório:

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

Este estilo de API permite-lhe obter e alterar informações sobre o ficheiro através de uma única chamada para o sistema de ficheiros. No exemplo apresentado acima, existe apenas uma chamada do sistema de ficheiros para buscar informações e, em seguida, poderá efectuar as operações que pretender no objecto IFileInfo sem atingir o disco novamente.

A classe EFS contém métodos do fornecedor estáticos para a obtenção de instâncias IFileStore e IFileSystem, bem como de várias constantes de opção e códigos de erro.