URI-Objekt mit relativem Path

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein URI-Objekt, das ich gerne als Argument verwende, um ein File-Objekt zu erhalten:
Code:
URI uri;
...
File file = new File(uri);

uri sieht folgendermaßen aus:
Code:
file://src/test/resources/beispiele/meinFile.xml

Leider hat das nicht funktioniert:
Code:
java.lang.IllegalArgumentException: URI has an authority component

Was aber wohl funktioniert ist, wenn uri den absoluten Path als Wert bekommt:
Code:
file:///C:/meinProjekt/workspace/src/test/resources/beispiele/meinFile.xml

Ich kann aber leider nicht den absoluten Pfad angeben, da der Code nicht nur lokal sondern auch auf einer anderen Umgebung ausgeführt wird.

Ich habe bereits versucht, zu googeln, wie ich ein URI-Objekt mit relatiem Path erstelle, leider erfolgslos.

Hat jemand vielleicht eine Idee? Vielen Dank.

Viele Grüße aus Rheinland,

Eure Ratna
 
Hallo Ratna,

meines Wissens nach (kann auch falsch liegen) braucht eine URI nach Angabe des "Protokolls" (in deinem Fall "file:") immer 3 Slashes, egal ob absoluter oder relativer Pfad. Bei deinem absolutem Pfad ist das auch der Fall (weswegen dieser wohl funktioniert). Bei deinem relativen Pfad sehe ich allerdings nur 2 Slashes (wie man es bei einer URL machen würde => http://......).

Ich hab wirklich keine Ahnung, ob es daran liegt oder ob es da allgemein ein Problem mit relativen Pfaden gibt, würde das aber eher ausschließen. Vielleicht war's das ja auch schon, ist mir aber wie gesagt jetzt nur auf die Schnelle aufgefallen, ohne dass ich das getestet habe ;)

Gruß
Daniel

[EDIT:

Ok hab grad mal in einer freien Minute doch kurz Wikipedia angeschmissen: http://de.wikipedia.org/wiki/Uniform_Resource_Identifier#Aufbau
Du hast ja geschrieben, dass der Fehler wäre, die authority würde fehlen. Eine URI hat wohl auch nur 2 Slashes, es kommt die bei "file:///" nur so vor, weil es da eben (wenn ich das jetzt richtig verstanden habe) keine authority weil das z.B. ein Server etc. wäre, du aber ja lokal drauf zugreifst.

Beipiel: Eine autority wäre über http z.B. de.wikipedia.org (also http://de.wikipedia.org/{pfad})
Bei file hast du das eben nicht und da die authority leer ist und der Pfad erst nach dieser beginnt, gibt es eben 3 Slashes (sind ja sonst auch drei bevor der Pfad beginnt, nur dass bei file eben nichts zwischen Slash 2 und 3 steht, nicht mal ein Leerzeichen)

Ich hoffe, dass man das jetzt einigermaßen verstehen konnte :) ]
 
Zuletzt bearbeitet:
Hallo Improof,

vielen lieben Dank für die Antwort. Hat mir sehr geholfen, weiterzukommen.

Viele Grüße aus Rheinland,

Eure Ratna
 
Zurück