Copyright (c) 2005, 2013 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
/******************************************************************************* * Copyright (c) 2005, 2013 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API *******************************************************************************/
package org.eclipse.core.filesystem; import java.net.URI; import org.eclipse.core.filesystem.provider.FileInfo; import org.eclipse.core.internal.filesystem.InternalFileSystemCore; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor;
This class is the main entry point for clients of the Eclipse file system API. This class has factory methods for obtaining instances of file systems and file stores, and provides constants for option values and error codes.
Since:org.eclipse.core.filesystem 1.0
@noextendThis class is not intended to be subclassed by clients.
@noinstantiateThis class is not intended to be instantiated by clients.
/** * This class is the main entry point for clients of the Eclipse file system API. This * class has factory methods for obtaining instances of file systems and file * stores, and provides constants for option values and error codes. * * @since org.eclipse.core.filesystem 1.0 * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */
public class EFS {
The unique identifier constant (value "org.eclipse.core.filesystem") of the Core file system plug-in.
/** * The unique identifier constant (value "<code>org.eclipse.core.filesystem</code>") * of the Core file system plug-in. */
public static final String PI_FILE_SYSTEM = "org.eclipse.core.filesystem"; //$NON-NLS-1$
The simple identifier constant (value "filesystems") of the extension point of the Core file system plug-in where plug-ins declare file system implementations.
/** * The simple identifier constant (value "<code>filesystems</code>") of * the extension point of the Core file system plug-in where plug-ins declare * file system implementations. */
public static final String PT_FILE_SYSTEMS = "filesystems"; //$NON-NLS-1$
A constant known to be zero (0), used in operations which take bit flags to indicate that "no bits are set". This value is also used as a default value in cases where a file system attribute cannot be computed.
See Also:
/** * A constant known to be zero (0), used in operations which * take bit flags to indicate that "no bits are set". This value is * also used as a default value in cases where a file system attribute * cannot be computed. * * @see IFileInfo#getLength() * @see IFileInfo#getLastModified() */
public static final int NONE = 0;
Option flag constant (value 1 <<0) indicating a file opened for appending data to the end.
See Also:
  • openOutputStream.openOutputStream(int, IProgressMonitor)
/** * Option flag constant (value 1 &lt;&lt;0) indicating a file opened * for appending data to the end. * * @see IFileStore#openOutputStream(int, IProgressMonitor) */
public static final int APPEND = 1 << 0;
Option flag constant (value 1 <<1) indicating that existing files may be overwritten.
See Also:
/** * Option flag constant (value 1 &lt;&lt;1) indicating that existing * files may be overwritten. * * @see IFileStore#copy(IFileStore, int, IProgressMonitor) * @see IFileStore#move(IFileStore, int, IProgressMonitor) */
public static final int OVERWRITE = 1 << 1;
Option flag constant (value 1 <<2) indicating that an operation acts on a single file or directory, and not its parents or children.
See Also:
/** * Option flag constant (value 1 &lt;&lt;2) indicating that an * operation acts on a single file or directory, and not its parents * or children. * * @see IFileStore#copy(IFileStore, int, IProgressMonitor) * @see IFileStore#mkdir(int, IProgressMonitor) */
public static final int SHALLOW = 1 << 2;
Option flag constant (value 1 <<10) indicating that a file's attributes should be updated.
See Also:
  • putInfo.putInfo(IFileInfo, int, IProgressMonitor)
/** * Option flag constant (value 1 &lt;&lt;10) indicating that a * file's attributes should be updated. * * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) */
public static final int SET_ATTRIBUTES = 1 << 10;
Option flag constant (value 1 <<11) indicating that a file's last modified time should be updated.
See Also:
  • putInfo.putInfo(IFileInfo, int, IProgressMonitor)
/** * Option flag constant (value 1 &lt;&lt;11) indicating that a * file's last modified time should be updated. * * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) */
public static final int SET_LAST_MODIFIED = 1 << 11;
Option flag constant (value 1 <<12) indicating that a cached representation of a file should be returned.
See Also:
  • toLocalFile.toLocalFile(int, IProgressMonitor)
/** * Option flag constant (value 1 &lt;&lt;12) indicating that * a cached representation of a file should be returned. * * @see IFileStore#toLocalFile(int, IProgressMonitor) */
public static final int CACHE = 1 << 12;
Attribute constant (value 1 <<1) indicating that a file is read only.
See Also:
/** * Attribute constant (value 1 &lt;&lt;1) indicating that a * file is read only. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) */
public static final int ATTRIBUTE_READ_ONLY = 1 << 1;
Attribute constant (value 1 <<21) indicating that a file is marked with immutable flag.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;21) indicating that a * file is marked with immutable flag. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_IMMUTABLE = 1 << 21;
Attribute constant (value 1 <<22) indicating that a file's owner has a read permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;22) indicating that a * file's owner has a read permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_OWNER_READ = 1 << 22;
Attribute constant (value 1 <<23) indicating that file's owner has a write permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;23) indicating that * file's owner has a write permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_OWNER_WRITE = 1 << 23;
Attribute constant (value 1 <<24) indicating that file's owner has an execute permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;24) indicating that * file's owner has an execute permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_OWNER_EXECUTE = 1 << 24;
Attribute constant (value 1 <<25) indicating that users in file's group have a read permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;25) indicating that * users in file's group have a read permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_GROUP_READ = 1 << 25;
Attribute constant (value 1 <<26) indicating that users in file's group have a write permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;26) indicating that * users in file's group have a write permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_GROUP_WRITE = 1 << 26;
Attribute constant (value 1 <<27) indicating that users in file's group have an execute permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;27) indicating that * users in file's group have an execute permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_GROUP_EXECUTE = 1 << 27;
Attribute constant (value 1 <<28) indicating that other users have a read permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;28) indicating that * other users have a read permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_OTHER_READ = 1 << 28;
Attribute constant (value 1 <<29) indicating that other users have a write permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;29) indicating that * other users have a write permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_OTHER_WRITE = 1 << 29;
Attribute constant (value 1 <<30) indicating that other users have an execute permission.
See Also:
Since:org.eclipse.core.filesystem 1.3
/** * Attribute constant (value 1 &lt;&lt;30) indicating that * other users have an execute permission. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.3 */
public static final int ATTRIBUTE_OTHER_EXECUTE = 1 << 30;
Attribute constant (value 1 <<2) indicating that a file is a executable.
See Also:
/** * Attribute constant (value 1 &lt;&lt;2) indicating that a * file is a executable. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) */
public static final int ATTRIBUTE_EXECUTABLE = 1 << 2;
Attribute constant (value 1 <<3) indicating that a file is an archive.
See Also:
/** * Attribute constant (value 1 &lt;&lt;3) indicating that a * file is an archive. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) */
public static final int ATTRIBUTE_ARCHIVE = 1 << 3;
Attribute constant (value 1 <<4) indicating that a file is hidden.
See Also:
/** * Attribute constant (value 1 &lt;&lt;4) indicating that a * file is hidden. * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) */
public static final int ATTRIBUTE_HIDDEN = 1 << 4;
Attribute constant (value 1 <<5) indicating that a file is a symbolic link.

If this attribute is true for a given IFileInfo instance, a String value may be associated with the attribute holding the symbolic link target. This link target can be retrieved with IFileInfo.getStringAttribute(int) with attribute type ATTRIBUTE_LINK_TARGET.

Symbolic links are handled transparently, as implemented by the underlying operating system. This means, that all other attributes of a IFileInfo apply to the link target instead of the link. Reading or writing a file, or changing attributes applies to the link target and not the link itself. In case a symbolic link points to another symbolic link, the chain of links is transparently followed and operations apply to the actual file or directory being referenced by the chain of symbolic links.

Broken symbolic links (which do not reference any valid file or directory) are being returned by IFileStore.childInfos(int, IProgressMonitor), but IFileInfo.exists() returns false for these. Operations like reading or writing on broken symbolic links throw a "file not found" exception.

See Also:
Since:org.eclipse.core.filesystem 1.1
/** * Attribute constant (value 1 &lt;&lt;5) indicating that a * file is a symbolic link. * <p> * If this attribute is <code>true</code> for a given {@link IFileInfo} * instance, a String value may be associated with the attribute * holding the symbolic link target. This link target can be * retrieved with {@link IFileInfo#getStringAttribute(int)} with attribute * type {@link #ATTRIBUTE_LINK_TARGET}. * </p> * <p> * Symbolic links are handled transparently, as implemented by the * underlying operating system. This means, that all other attributes * of a {@link IFileInfo} apply to the link target instead of the link. * Reading or writing a file, or changing attributes applies to the * link target and not the link itself. In case a symbolic link points * to another symbolic link, the chain of links is transparently followed * and operations apply to the actual file or directory being referenced * by the chain of symbolic links. * </p> * <p> * Broken symbolic links (which do not reference any valid file or directory) * are being returned by {@link IFileStore#childInfos(int, IProgressMonitor)}, * but {@link IFileInfo#exists()} returns <code>false</code> for these. * Operations like reading or writing on broken symbolic links throw * a "file not found" exception. * </p> * * @see IFileStore#fetchInfo() * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @see IFileInfo#getAttribute(int) * @see IFileInfo#setAttribute(int, boolean) * @since org.eclipse.core.filesystem 1.1 */
public static final int ATTRIBUTE_SYMLINK = 1 << 5;
Attribute constant (value 1 <<6) for a string attribute indicating the target file name of a symbolic link.

Note that setting the link target attribute does not cause a symbolic link to be created, or changed to link to a different file. Rather, this attribute is set by file system implementations based on the current state of a link.

See Also:
Since:org.eclipse.core.filesystem 1.1
/** * Attribute constant (value 1 &lt;&lt;6) for a string attribute indicating the * target file name of a symbolic link. * <p> * Note that setting the link target attribute does not cause a symbolic * link to be created, or changed to link to a different file. Rather, this * attribute is set by file system implementations based on the current * state of a link. * </p> * * @see IFileInfo#getStringAttribute(int) * @see FileInfo#setStringAttribute(int, String) * @see #ATTRIBUTE_SYMLINK * @since org.eclipse.core.filesystem 1.1 */
public static final int ATTRIBUTE_LINK_TARGET = 1 << 6;
Scheme constant (value "file") indicating the local file system scheme.
See Also:
  • getLocalFileSystem.getLocalFileSystem()
/** * Scheme constant (value "file") indicating the local file system scheme. * @see EFS#getLocalFileSystem() */
public static final String SCHEME_FILE = "file"; //$NON-NLS-1$
Scheme constant (value "null") indicating the null file system scheme.
See Also:
  • getNullFileSystem.getNullFileSystem()
/** * Scheme constant (value "null") indicating the null file system scheme. * @see EFS#getNullFileSystem() */
public static final String SCHEME_NULL = "null"; //$NON-NLS-1$ /* * Status code definitions */ // Errors [266-298]
Status code constant (value 268) indicating a store unexpectedly exists on the file system. Severity: error. Category: file system.
/** Status code constant (value 268) indicating a store unexpectedly * exists on the file system. * Severity: error. Category: file system. */
public static final int ERROR_EXISTS = 268;
Status code constant (value 269) indicating a store unexpectedly does not exist on the file system. Severity: error. Category: file system.
/** Status code constant (value 269) indicating a store unexpectedly * does not exist on the file system. * Severity: error. Category: file system. */
public static final int ERROR_NOT_EXISTS = 269;
Status code constant (value 270) indicating the file system location for a store could not be computed. Severity: error. Category: file system.
/** Status code constant (value 270) indicating the file system location for * a store could not be computed. * Severity: error. Category: file system. */
public static final int ERROR_NO_LOCATION = 270;
Status code constant (value 271) indicating an error occurred while reading from the file system. Severity: error. Category: file system.
/** Status code constant (value 271) indicating an error occurred while * reading from the file system. * Severity: error. Category: file system. */
public static final int ERROR_READ = 271;
Status code constant (value 272) indicating an error occurred while writing to the file system. Severity: error. Category: file system.
/** Status code constant (value 272) indicating an error occurred while * writing to the file system. * Severity: error. Category: file system. */
public static final int ERROR_WRITE = 272;
Status code constant (value 273) indicating an error occurred while deleting from the file system. Severity: error. Category: file system.
/** Status code constant (value 273) indicating an error occurred while * deleting from the file system. * Severity: error. Category: file system. */
public static final int ERROR_DELETE = 273;
Status code constant (value 275) indicating this file system is not case sensitive and a file that differs only in case unexpectedly exists on the file system. Severity: error. Category: file system.
/** Status code constant (value 275) indicating this file system is not case * sensitive and a file that differs only in case unexpectedly exists on * the file system. * Severity: error. Category: file system. */
public static final int ERROR_CASE_VARIANT_EXISTS = 275;
Status code constant (value 276) indicating a file exists in the file system but is not of the expected type (file instead of directory, or vice-versa). Severity: error. Category: file system.
/** Status code constant (value 276) indicating a file exists in the * file system but is not of the expected type (file instead of directory, * or vice-versa). * Severity: error. Category: file system. */
public static final int ERROR_WRONG_TYPE = 276;
Status code constant (value 277) indicating that the parent file in the file system is marked as read-only. Severity: error. Category: file system.
/** Status code constant (value 277) indicating that the parent * file in the file system is marked as read-only. * Severity: error. Category: file system. */
public static final int ERROR_PARENT_READ_ONLY = 277;
Status code constant (value 279) indicating that the file in the file system is marked as read-only. Severity: error. Category: file system.
/** Status code constant (value 279) indicating that the * file in the file system is marked as read-only. * Severity: error. Category: file system. */
public static final int ERROR_READ_ONLY = 279;
Status code constant (value 280) indicating that the file system failed to authenticate the request. This can be caused by missing or incorrect authentication information being supplied. Severity: error. Category: file system.
Since:1.4
/** Status code constant (value 280) indicating that the * file system failed to authenticate the request. This can be caused * by missing or incorrect authentication information being supplied. * Severity: error. Category: file system. * @since 1.4 */
public static final int ERROR_AUTH_FAILED = 280;
Status code constant (value 566) indicating an internal error has occurred. Severity: error. Category: internal.
/** Status code constant (value 566) indicating an internal error has occurred. * Severity: error. Category: internal. */
public static final int ERROR_INTERNAL = 566;
Creates an empty file information object. The resulting information will represent a non-existent file with no name and no attributes set.
See Also:
  • putInfo.putInfo(IFileInfo, int, IProgressMonitor)
Returns:an empty file information object.
/** * Creates an empty file information object. The resulting information * will represent a non-existent file with no name and no attributes set. * * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor) * @return an empty file information object. */
public static IFileInfo createFileInfo() { return new FileInfo(); }
Returns a file system corresponding to the given scheme.
Params:
  • scheme – The file system URI scheme
Throws:
  • CoreException – if this method fails. Reasons include:
    • There is no registered file system for the given URI scheme.
    • There was a failure initializing the file system.
Returns:The corresponding file system for the given scheme
/** * Returns a file system corresponding to the given scheme. * * @param scheme The file system URI scheme * @return The corresponding file system for the given scheme * @exception CoreException if this method fails. Reasons include: * <ul> * <li>There is no registered file system for the given URI scheme.</li> * <li>There was a failure initializing the file system.</li> * </ul> */
public static IFileSystem getFileSystem(String scheme) throws CoreException { return InternalFileSystemCore.getInstance().getFileSystem(scheme); }
Returns the local file system.
Returns:The local file system
/** * Returns the local file system. * * @return The local file system */
public static IFileSystem getLocalFileSystem() { return InternalFileSystemCore.getInstance().getLocalFileSystem(); }
Returns the null file system. The null file system can be used to represent a non-existent or unresolved file system. An example of a null file system is a file system whose location is relative to an undefined variable, or a system whose scheme is unknown.

Basic handle-based queries can be performed on the null file system, but all operations that actually require file system access will fail.

Returns:The null file system
/** * Returns the null file system. The null file system can be used * to represent a non-existent or unresolved file system. An example * of a null file system is a file system whose location is relative to an undefined * variable, or a system whose scheme is unknown. * <p> * Basic handle-based queries can be performed on the null file system, but all * operations that actually require file system access will fail. * * @return The null file system */
public static IFileSystem getNullFileSystem() { return InternalFileSystemCore.getInstance().getNullFileSystem(); }
Returns the file store corresponding to the provided URI.
Params:
  • uri – The URI of the file store to return
Throws:
  • CoreException – if this method fails. Reasons include:
    • There is no registered file system for the given URI scheme.
    • The URI syntax was not in the appropriate form for that scheme.
    • There was a failure initializing the file system.
Returns:The file store
/** * Returns the file store corresponding to the provided URI. * * @param uri The URI of the file store to return * @return The file store * @exception CoreException if this method fails. Reasons include: * <ul> * <li>There is no registered file system for the given URI scheme.</li> * <li>The URI syntax was not in the appropriate form for that scheme.</li> * <li>There was a failure initializing the file system.</li> * </ul> */
public static IFileStore getStore(URI uri) throws CoreException { return InternalFileSystemCore.getInstance().getStore(uri); }
This class is not intended to be instantiated.
/** * This class is not intended to be instantiated. */
private EFS() { super(); } }