I'm using Windows-7 with java 7 update 6 and found this weird (at least to me) behavior -
I have two files E:\delete1.txt
and E:\delete2.txt
both are read only files, when I try to delete file like following it gets deleted without any issues -
File file = new File("E:\\delete1.txt");
assertTrue(file.delete());
But when I delete file using nio API like following -
Path path = Paths.get("E:\\delete2.txt");
Files.delete(path);
It throws java.nio.file.AccessDeniedException
.
Why different behavior for same operation with old and new nio API?
Click on the “Select Files or Folders” tab in the far left, to start a new comparison. Each comparison you run opens in a new tab. To start a new comparison, click on the “Select Files or Folders” tab in the far left, change the targets and click “Compare” again.
As discussed here - The issue is that java.io.File
has many oddities, on Windows in
particular. In this case it resets the file attributes before it deletes
the file so this is why it does not fail as might be expected. It is
behavior that dates back >10 years and so would be risky to change now.
It has several other oddities like this, just one of the reason why it
wasn't re-implemented to use the new API.
If we try to delete the file from command window then windows throws the same (Access denied) error but file gets deleted from explorer window. It appears the File#delete()
has a wrong implementation and new Files#delete(Path)
should be preferred instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With