Is it better to use import scala.reflect.io.File or java.io.File in Scala?
file, scala
Solution
Neither, you're supposed to use `java.nio.file`, of course.
If you want to "enhance" that API with fancy operators, use extension methods. The author of that code has said as much on the mailing list. Being stuck on Java 6 is considered unfortunate.
The package you're pointing to was pulled into the `scala-reflect.jar` to support reflection, but warnings are everywhere about its unsupported status.
The `AbstractFile` abstraction is used by `Position`, which has a source file. The "file" you get from that is a `java.io.File`, but `AbstractFile` has factory methods that take the `reflect.io.Path` abstraction (with `File` and `Directory` subtypes). So all that code remains packaged together.
I have to stop and think every time `AbstractFile` and `File` cross my path (pun alert). I used to have a purple "`AbstractFile` is, like, totally different from `File`" t-shirt, but it wore out with multiple washings.
On the back it said, "`Position` has nothing to do with `io.Position`."
Here is the warning as it touches `api.Position`, where of course it is user-facing in the scaladoc; notice it says it is a "Java file":
/** Java file corresponding to the source file of this position.
*
* The return type is `scala.reflect.io.AbstractFile`, which belongs to an experimental part of Scala reflection.
* It should not be used unless you know what you are doing. In subsequent releases, this API will be refined
* and exposed as a part of scala.reflect.api.
*
* @group Common
*/
def source: scala.reflect.internal.util.SourceFile
To answer your first question, I think it's safe to say, Yes, it was supposed to help.
Problem
I see the scala.reflect.io.File class, is this supposed to help with file operations? Am I supposed to prefer to use this rather than java.io.File? What is the purpose of this class?