Wie kann ein File-Objekt zu einem URL gewandelt werden und umgekehrt?
Ausgangspunkt für die Erzeugung eines File
-Objektes,
wie auch eines lokalen URL, ist i.A. ein absoluter Pfad.
Bis Java 19 konnte durch Aufruf eines Konstruktors der
Klasse URL
durch Parametrisierung mit einem
Pfad-String direkt ein URL
-Objekt erzeugt werden.
Dies war fehlerträchtig, da unzulässige
Zeichen nicht konvertiert wurden. Ab Java 20 sind alle
Konstruktoren der Klasse nun als deprecated
gekennzeichnet und sollten somit nicht mehr verwendet
werden.
String path = "/Test/datei neu.php"; URL url = new URL("file", null, path); // deprecated System.out.println("URL: " + url); // URL: file:/Test/datei neu.php (Leerzeichen nicht erlaubt)
Die Erzeugung eines URL
geschieht nun
ausgehend von einem URI
-Objekt, bei dessen
Erzeugung Sonderzeichen ggf. kodiert werden. Dem
überladenen Konstruktor werden im vorliegenden Fall
das Protokoll, der Pfad und, hier nicht vorhanden, ein
Fragment, etwa ein Sprungziel, übergeben. Bei
Vorhandensein wird es, getrennt durch ein Doppelkreuz ('#')
dem Pfad rechts angefügt.
URI uri = new URI("file", path, null); System.out.println("URI: " + uri); // URI: file:/Test/datei%20neu.php (Leerzeichen kodiert)
In der Folge kann aus dem URI
dann ein URL
-Objekt
gebildet werden.
URL url = uri.toURL(); System.out.println("URL: " + url); // URL: file:/Test/datei%20neu.php
Analog zur Methode toURL()
der Klasse URI
besitzt die Klasse URL
auch eine Methode toURI()
,
über die ein URL
auch wieder
zurück in ein URI
überführt
werden kann.
Ein URI
kann dann direkt
zur Erzeugung eines File
-Objektes
herangezogen werden, da einer der vier File
-Konstruktoren
ein URI
-Objekt als Parameter nutzen
kann. Hierbei werden konvertierte Sonderzeichen wieder
umgewandelt:
File file = new File(uri); System.out.println("file: " + file); // file: /Test/datei neu.php
Lauffähiger Quelltext:
import java.io.File; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; public class URLToFile { public static void main(String[] args) { final String path = "/Test/datei neu.php"; File f = new File(path); URL url = file2URL(f); File file = url2File(url); System.out.println(url); // file:/Test/datei%20neu.php System.out.println(file); // /Test/datei neu.php } private static URL file2URL(File file) { URL url = null; String path = file.getAbsolutePath(); try { URI uri = new URI("file", path, null); url = uri.toURL(); } catch (URISyntaxException | MalformedURLException e) { e.printStackTrace(); } return url; } private static File url2File(URL url) { File file = null; try { file = new File(url.toURI()); } catch (URISyntaxException e) { e.printStackTrace(); } return file; } }
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.