Utilizar la API de sistema de archivos

El plug-in org.eclipse.core.filesystem suministra una API genérica para interactuar con un sistema de archivos arbitrario. Esta API es similar a java.io.File, con algunas diferencias importantes:

En la API de sistema de archivos, la vía de acceso a un archivo determinado se representa con el formato jerárquico java.net.URI. El esquema del URI representa el tipo de sistema de archivos y el componente de cía de acceso del URI representa la ubicación del archivo dentro del árbol del sistema de archivos. Por tanto, un URI jerárquico dado representará un archivo o directorio potencial de algún sistema de archivos arbitrario.

La API para trabajar con archivos y sistemas de archivos se encuentra en el paquete org.eclipse.core.filesystem. El tipo de la API central es IFileStore. Cada instancia de IFileStore representa un solo archivo del sistema de archivos. Como en el caso de IResource, la existencia de una instancia de IFileStore no significa que en el disco exista un archivo de ese tipo. Puede utilizar una instancia de IFileStore para crear, suprimir, copiar, mover o abrir corrientes en archivos. Para un URI determinado, puede acceder a una instancia de IFileStore mediante el método estático EFS.getStore(URI)

La interfaz IFileSystem puede utilizarse para averiguar información acerca del sistema de archivos en conjunto. Cada instancia de IFileSystem representa un solo esquema de URI, como por ejemplo "file:", "ftp:", etc. Puede utilizar este tipo para formular preguntas tales como qué atributos de archivos están soportados o si el sistema de archivos es sensible a mayúsculas y minúsculas. También puede utilizar este tipo para obtener un IFileStore para un URI determinado.

La mayoría de los métodos de IFileStore tiene un parámetro distintivo (flag) que permite especificar opciones adicionales. Los valores de distintivo pueden encontrarse en la clase EFS. Por ejemplo, para abrir una corriente de salida para añadirla a un archivo, especifique:

	IFileStore store = ...//algún almacén de archivos
	store.openOutputStream(EFS.APPEND, null);

Si desea el comportamiento predeterminado para un método, utilice EFS.NONE.

La interfaz IFileInfo representa el estado de un archivo en un momento determinado. En particular, puede averiguar si el archivo existe, si es un directorio, cuáles son sus atributos, etc. Esta información puede modificarse y luego establecerla de nuevo en el archivo. Por ejemplo, este fragmento de código establece el atributo de sólo lectura (read only) en un directorio:

	IFileStore store = ...//algún almacén de archivos
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 obtener y cambiar información de archivo con una simple llamada al sistema de archivos. En el ejemplo anterior, sólo se realiza una llamada al sistema de archivos para extraer la información y, a continuación, puede realizar cuantas operaciones desee en el objeto IFileInfo sin implicar de nuevo al disco.

La clase EFS contiene métodos estáticos de fábrica para obtener instancias de IFileStore y IFileSystem, así como diversas constantes de opción y códigos de error.