Java kann kein "file://"

// Linux
File f1 = new File("file://tmp/foobar.txt");
System.out.println(f1.getAbsolutePath());

// Windows
File f2 = new File("file://C:/tmp/foobar.txt");
System.out.println(f2.getAbsolutePath());
Liefert:

Unter Linux: /work/file:/tmp/foobar.txt
Unter Windows: C:\work\file:\C:\tmp\foobar.txt

Beides ungueltige Pfad-Angaben. Java erkennt also das "file://" nicht, behandelt es als relativen Pfad und pappt es einfach an das aktuelle Verzeichnis (hier "/work" bzw. "C:\work") dran. Auch meine erste Vermutung, man müsste stattdessen file:/// (mit 3 Slashes) schreiben, weil es ja eigentlich file://<Host weggelassen>/ lautet, funktioniert nicht.

Mal schaun, ob sich dazu was ergoogeln lässt.

Update: Ein bisschen Probieren ergab folgende Lösung:
File f = new File(new URI("file:///tmp/foobar.txt"));
File f = new File(new URI("file:///C:/tmp/foobar.txt"));
Sprich: Erst eine URI erzeugen (mit 3 Slashes) und die dem File-Konstruktor geben.