What exactly is the difference between a filename on disk and a FileObject? How do I convert them?

Raw files on disk are generally represented in Java using java.io.File. These correspond directly to what the operating system thinks of as a file.

Under the Filesystems API, raw files are not usually manipulated directly. Rather, you should usually be using FileObject. Besides the fact that most other APIs that work with files expect FileObject, these have a number of advantages:

  • The filesystem they come from need not correspond to physical files on disk, but could be JAR file entries, or potentially database entries, FTP downloads, etc.
  • The rest of the IDE can interact with them in an object-oriented fashion, including locking and change notification.

However a FileObject must always exist, unlike File.

In case translation from one to the other is necessary:

  • To look for a FileObject representing a File, use FileUtil.toFileObject(File).
  • To look for a File from a FileObject, you may use FileUtil.toFile(FileObject).

Source: NetBeans FAQ