Setting FILE_DISPOSITION_POSIX_SEMANTICS when deleting files on Windows

Luke Hutchison luke.hutch at
Mon May 6 23:57:29 UTC 2019

Recent Windows 10 builds support POSIX-style file deletion semantics:

Setting this bit before deleting files using File::delete, Files::delete,
Files::deleteIfExists etc. will work around the common problem on Windows
where an attempt to delete an open file silently fails. This is a very
common problem, experienced by developers when they forget to close not
just any open OutputStream on a file before attempting to delete it, but
also any open InputStream.

This problem is exacerbated by the fact that a file cannot be deleted if it
is mmap'd, and a file cannot be safely forcibly unmapped until it is
garbage collected:

Since file locking and deletion semantics are different on Windows than
Linux and Mac OS X, and since the silent failure of file deletion when a
file is open is almost always a source of surprise to developers coming
from the Linux or Mac OS X world, the lack of default POSIX file deletion
semantics on Windows presents a portability issue.

I propose the FILE_DISPOSITION_POSIX_SEMANTICS bit be set for all delete
operations in the Windows build of Java, to unify file deletion semantics
across operating systems.

More information about the jdk-dev mailing list