java.nio.file.Files.isReadable() slow on Windows 7

Alan Bateman Alan.Bateman at oracle.com
Fri May 11 00:32:04 PDT 2012


On 11/05/2012 04:09, Zhong Yu wrote:
> java.nio.file.Files.isReadable() seems to be really slow on Windows 7;
> on my machine it takes 3ms per call (tested in a tight loop on the
> same file). That means only 300 calls per second.
>
> It's much faster to test readability by opening a file channel for
> read then close it.
>
> Any other workarounds?
>
> Zhong Yu
Oops, I thought we had put in a fast path for the check read case. The 
background to this is that checking access to a file on Windows is very 
expensive because it requires reading the DACL and determining the 
user's effective access.

I don't have time to check a Windows machine just at the minute but can 
you change:

Files.isReadable(path)

to

path.getFileSystem().provider().checkAccess(path)

in your test, re-run and tell us if this fixes the issue. I suspect it 
will because checkAccess has a fast path for the check read case, and 
that fast path doesn't take correctly take access of the isReadable usage.

-Alan.


More information about the nio-dev mailing list