Before Java 1.4 it was common practice to work with files by moving bytes around between different InputStreams/OutputStreams.
Since Java 1.4, where NIO got added, it is suggested to use Channels to do the same.
With NIO2 in Java 7, there will be yet another API in java.nio.file which supports doing things like
val source = Paths.get("fooDir/fooFile.txt")
val target = Paths.get("barDir/barFile.txt")
source moveTo target
source createLinkTo target
Are the older ones more or less useless now for file system operations unless you want to touch bytes manually?
For most operations, NIO2 will let you do more / better.
Some operations are just impossible using legacy APIs (some attributes, ACL, file change notifications, better error handling…).
And best of all: this is not necessarily more difficult.
To answer your question: when you could do some operations with two different APIs, I don’t see any use case where the old one would allow to do it better.
There has been some discussion:
Java NIO FileChannel versus FileOutputstream performance / usefulness
http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-is-not-faster-than.html
But I’d say newest APIs are designed to be faster. If they don’t in some situation, expect a jvm update to restore the situation without having to change any code if you’ve been using the newer APIs.