Auf den ersten Blick stellen die Klassen
File, URI
und
URL ausreichend Methoden bereit, um
Konvertierungen vom einen Objekt in ein anderes vorzunehmen. Das Problem
liegt jedoch in deren Verhalten, bzw. dem Konvertierungsumfang.
Die
Methode
fileToURL(File file) nimmt ein File-Objekt entgegen, aus
dessen Pfad, versehen mit dem Protokoll-Präfix
file:// ein
URL-Objekt gebildet wird. Dies funktioniert bei einfachen Pfaden recht gut,
versagt jedoch bei nicht URL-konformen Sonderzeichen. So werden Leerzeichen
z.B. nicht konvertiert. Um dies zu erreichen bietet es sich an, das
File-Objekt zunächst in ein URI-Objekt und anschließend von dort
in ein URL-Objekt zu casten.
static URL fileToURL(File file){
URL url = null;
try {
url = new URL("file://" + file.getPath());
// Sonderzeichen (z.B. Leerzeichen) bleiben erhalten
System.out.println(url);
// Sonderzeichen (z.B. Leerzeichen) werden codiert
url = file.toURI().toURL();
System.out.println(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return url;
}
Den umgekehrten Weg nimmt die Methode
urlToFile(URL url). Der URL
wird zunächst in einen URI gewandelt, der als Argument für die
Bildung eines File-Objektes herangezogen wird. Hier taucht jedoch das
gegenteilige Problem von oben auf: z.B. URL mit Leerzeichen können
nicht konvertiert werden, sodass in diesen Fällen innerhalb der
catch-Klausel auf den Pfadanteil der URL zurückgegriffen wird.
static File urlToFile(URL url) {
File file = null;
try {
file = new File(url.toURI());
} catch(URISyntaxException e) {
file = new File(url.getPath());
}
System.out.println(file);
return file;
}
gesamter 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) {
URL url;
try {
url = new URL("file:///Users/joecze/sites/javabeginners/index.php");
File file = urlToFile(url);
fileToURL(file);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
static File urlToFile(URL url) {
File file = null;
try {
file = new File(url.toURI());
} catch(URISyntaxException e) {
file = new File(url.getPath());
}
System.out.println(file);
return file;
}
static URL fileToURL(File file){
URL url = null;
try {
url = new URL("file://" + file.getPath());
System.out.println(url);
url = file.toURI().toURL();
System.out.println(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return url;
}
}