Utilizando a API do Sistema de Arquivo

O plug-in org.eclipse.core.filesystem fornece uma API genérica para interagir com um sistema de arquivo arbitrário. Essa API é semelhante à java.io.File, com poucas diferenças importantes:

Na API do sistema de arquivo, o caminho para um determinado arquivo é representado como um java.net.URI hierárquico. O esquema de URI representa o tipo de sistema de arquivo, enquanto o componente de caminho de URI representa o local do arquivo na árvore do sistema de arquivo. Dessa maneira, um determinado URI hierárquico representa um potencial arquivo ou diretório em um sistema de arquivo arbitrário.

A API para trabalhar com arquivos e sistemas de arquivo está localizada no pacote org.eclipse.core.filesystem. O tipo de API central é IFileStore Cada instância de IFileStore representa um único arquivo no sistema de arquivo. Como com o IResource, a existência de uma instância IFileStore não significa que tal arquivo exista no disco. Você pode utilizar uma instância IFileStore para criar, excluir, copiar, mover ou abrir fluxos nos arquivos. Para um determinado URI, você pode ter disponível uma instância IFileStore utilizando o método estático EFS.getStore(URI)

A instância IFileSystem pode ser utilizada para descobrir coisas a respeito do sistema de arquivo como um todo. Cada instância IFileSystem representa um único esquema de URI, como "file:", "ftp:", etc. Você pode utilizar esse tipo para fazer perguntas como quais atributos de arquivo são suportados ou se o sistema de arquivo faz distinção entre maiúsculas e minúsculas. Você também pode utilizar esse tipo para obter um IFileStore para um determinado URI.

A maioria dos métodos em IFileStore tem um parâmetro de sinalizador que permite fornecer opções extras. Os valores do sinalizador podem ser encontrados na classe EFS. Por exemplo, para abrir um fluxo de saída para anexar a um arquivo, utilize:

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

Se você quiser o comportamento padrão de um método, utilize EFS.NONE.

A interface IFileInfo representa o estado de um arquivo em um determinado momento. Particularmente, você poderá descobrir se o arquivo existe, se é um diretório, quais são seus atributos e assim por diante. Essas informações podem ser modificadas e depois retornadas para o arquivo. Por exemplo, aqui está um snippet que define o atributo de leitura em um diretó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);
	}

Esse estilo de API permite obter e alterar informações de arquivo com uma única chamada para o sistema de arquivo. No exemplo anterior, há somente uma chamada de sistema de arquivo para buscar as informações, e depois você pode executar quantas operações quiser no objeto IFileInfo sem acessar o disco novamente.

A classe EFS tem métodos estáticos de depósito de informações para obter as instâncias IFileStore e IFileSystem, bem como várias constantes de opção e códigos de erro.