openjdk/jdk · warning · IOException

Cannot create directory

Error message

Cannot create directory

What it means

IOException from ExampleFileSystemView.createNewFolder when File.mkdir() returns false — the OS refused to create the 'New folder' directory. mkdir fails without throwing, so the demo converts the boolean into an IOException, losing the OS error detail.

Solutions

  1. Choose a writable parent directory before creating a folder.
  2. Check containingDir.isDirectory() && containingDir.canWrite() beforehand.
  3. In adapted code, use java.nio.Files.createDirectory which reports the real errno.

Example fix

// before
if (!result.mkdir()) throw new IOException("Cannot create directory");

// after: real error surfaced
try {
    Files.createDirectory(result.toPath());
} catch (IOException e) {
    throw new IOException("Cannot create " + result + ": " + e.getMessage(), e);
}
Defensive patterns

Strategy: validation

Validate before calling

// verify the parent is a writable directory before mkdir
if (containingDir == null || !containingDir.isDirectory() || !containingDir.canWrite())
    throw new IOException("cannot create folder in " + containingDir);

Try / catch

try {
    Files.createDirectory(result.toPath());
} catch (FileAlreadyExistsException e) {
    // pick another name
} catch (AccessDeniedException e) {
    // tell the user the directory is read-only
} catch (IOException e) {
    // surface the real errno-based message
}

Prevention

When it happens

Trigger: containingDir is read-only, does not exist, is a file, or the filesystem denies mkdir (permissions, immutable attribute, sandbox).

Common situations: User browsing into a read-only mount or system directory in the demo; disk full; macOS/Windows protected directories; applications reusing the demo view against restricted filesystems.

Related errors


AI-assisted analysis of openjdk/jdk@88dfb74bbe (2026-08-14). Data as JSON: /api/errors/0215b43947f40d18. Report an issue: GitHub.

Appendix: source

Thrown at src/demo/share/jfc/FileChooserDemo/ExampleFileSystemView.java:67

 * You can provide a superclass of the FileSystemView class with your own functionality.
 *
 * @author Pavel Porvatov
 */
public class ExampleFileSystemView extends FileSystemView {

    /**
     * Creates a new folder with the default name "New folder". This method is invoked
     * when the user presses the "New folder" button.
     */
    public File createNewFolder(File containingDir) throws IOException {
        File result = new File(containingDir, "New folder");

        if (result.exists()) {
            throw new IOException("Directory 'New folder' exists");
        }

        if (!result.mkdir()) {
            throw new IOException("Cannot create directory");
        }

        return result;
    }

    /**
     * Returns a list which appears in a drop-down list of the FileChooser component.
     * In this implementation only the home directory is returned.
     */
    @Override
    public File[] getRoots() {
        return new File[] { getHomeDirectory() };
    }

    /**
     * Returns a string that represents a directory or a file in the FileChooser component.
     * A string with all upper case letters is returned for a directory.
     * A string with all lower case letters is returned for a file.

View on GitHub (pinned to 88dfb74bbe)