Using NIO2 has a lot of benefits:
- more fine grained exception handling
- clearer semantics about what happens
- additional functionality
- possibility to work with virtual filesystems, etc.
We already banned File.delete and switched to Files.delete, I think we should ban File completely (except for some sugar methods that just forward with .toPath, like FSDirectory.open)
For tests, ideally we go a little further and ban methods like FileSystems.getDefault(). Instead we could exempt LuceneTestCase and ensure all Paths are created via one protected method. This leaves open the possibility to mock up filesystem behavior at a lower level in tests in the future.