The IDE internally uses the concept of a virtual filesystem. This interface is used by all upper layers of the IDE to read & write files, mount & display directories, move and delete files, and allow external compilation and execution to find libraries correctly.

The IDE itself implements two filesystems: a local filesystem, which encapsulates access to the operating system's normal files; and a JAR filesystem, which allows users to mount Java Archive Files as if they were read-only directories.

Using the Filesystems API, third parties may add support for access to file-like objects stored in some different manner - for example, in a database or proprietary object storage system. More commonly, module authors should use this API whenever they need access to files; then their module should work automatically with any filesystem supported by the IDE.

Other capabilities provided by the Filesystems API include locking files during write operations; listening for changes in a file's status, so that another part of the IDE may reflect that change; and providing support for including the filesystem in the runtime class path of an external compiler or executor.