java.io.IOException: Failed to open...

henpara

Bekanntes Mitglied
Hallo zusammen,
nach längerem fehlerfreien Programmieren hänge ich gerade einmal wieder.

Und zwar bei folgendem Code:
Java:
			if(Desktop.isDesktopSupported()){
	            File f = new File(GlobalVariables.getVal("HelpFile"));  //pfad zur html datei
	            URI  uri = f.toURI(); // 1.
	           // URI  uri = new URI("file:///E:/EclipseJ_workspace/CompleteCTS/Help/index.html"); //2.
	            System.out.println(uri.getPath());
	            Desktop.getDesktop().browse(uri);
	        }
wenn ich die Variante 1 wähle:
Die Datei existiert, er gibt den korrekten Pfad an
(/E:/EclipseJ_workspace/CompleteCTS/./Help/index.html), aber es kommt bei Desktop.getDesktop().browse(uri) zum Error.
wenn ich die Variante 2 wähle:
Er öffnet korrekt den Browser und zeigt die Seite richtig an.

Da ich gerne den Öffnungsmechanismus flexibel hätte (also bei Änderung des Dateinamens nur in einer ini-datei Änderungen vornehmen, statt hard im Code ändern zu müssen) bin ich noch nicht zufrieden.
Ich sehe aber gerade nicht, warum er die Datei bei Variante 1 nicht findet.

Zur Info:
GlobalVariables.getVal("HelpFile") ist ein String mit Inhalt: ".\Help\index.html"

Vorschläge?

€1:
Hab noch ein bischen rumprobiert und URI scheint mit relativen Pfadangaben nix anfangen zu können. Das is ja mal megabeschissen und Dinosaurierartig...
Wenn ich nämlich statt file:///E:/EclipseJ_workspace/CompleteCTS/Help/index.html
file:///E:/EclipseJ_workspace/CompleteCTS/./Help/index.html eingebe, kommt auch schon der Error. Der Browser hat mit solchen Eingaben überhaupt keine Probleme.
 
Zuletzt bearbeitet:
es gibt ja f.getAbsolutePath(), damit ein neues File-Objekt, daraus URI?
Genau da liegt das Problem. getAbsolutePath() merkt sich quasi, ob man das File per relativer Pfadangabe oder ohne erstellt hat.


Java:
        	File f = new File ("..\\CompleteCTS\\Help\\index.html");
        	File f1 = new File ("E:\\eclipse_workspaceJ\\CompleteCTS\\Help\\index.html");
        	System.out.println(f.getAbsolutePath());
        	System.out.println(f1.getAbsolutePath());

Ausgabe:
E:\EclipseJ_workspace\Testing\..\CompleteCTS\Help\index.html
E:\eclipse_workspaceJ\CompleteCTS\Help\index.html

Und mit File.toURI(); funktioniert das nur, wenn keine relativen Pfadangaben im File drin sind...
Es ist zum kotzen.
 
das zeigt einerseits dass ich nicht gut Methoden erinnern kann, aber auch dass du nicht um die Ecke denkst,
es gibt noch mehr Methoden auszuprobieren, getCanonicalPath() wärs gewesen,
nicht meckern sondern arbeiten..

wobei ich eigentlichen an ../ dachte, wo dann eine Verzeichnisebene wegfällt,
./ ist ja nur das aktuelle Verzeichnis, das könnte auch direkt vor der Übergabe an File aus dem String entfernt werden bzw. muss nicht in die ini-Datei, geht auch ohne
 
Java:
                File pfad = new File("..\\CompleteCTS\\Help\\index.html");
                System.out.println(pfad.getCanonicalPath());
                desktop.browse(URI.create("file://" + pfad.getCanonicalPath().replace('\\', '/')));

naja, geht sicher besser
 
das zeigt einerseits dass ich nicht gut Methoden erinnern kann, aber auch dass du nicht um die Ecke denkst,
Das ist richtig, wobei ich zu meiner Verteidigung noch sagen möchte, daß "absolute" Path doch wohl genau besagt, daß KEINE "relative" Pfadangabe gemacht wird...

Und dann macht es Java halt doch... hat mich einfach überfordert. Ich war zu sicher, daß getAbsolutePath() die richtige Methode war, daß ich nicht mehr in der Richtiugn weiter gesucht habe.

Danke für die Hilfe!
 
Und was ich noch erwähnen wollte:

Eigentlich hat File ja die Methode "toURI". Und genau diese Methode funktioniert nicht wie gewünscht, wenn man relative Pfadangaben bei über String konstruierte Files hat.

Das hat jetzt nichts mit meiner Unfähigkeit zu tun, sondern liegt viel mehr daran, daß die Methode toURI schlecht umgesetzt wurde.

Ich hätt jedenfalls erwartet, daß toURI mir eine funktionierende URI zurückliefert, wenn das File existiert, EGAL wie das File konstruiert wurde.
Aber vielleicht liegt ja auch dort bei getAbsolutePath() der Hase begraben?!

LG

€:
Hier jetzt meine Lösung:
Java:
				File f = new File(GlobalVariables.getVal("HelpFile"));  //pfad zur html datei
				Desktop.getDesktop().browse(f.getCanonicalFile().toURI());
Ist sogar noch schön kurz geworden.

€2:
Bleibt trotzdem noch die Tatsache, daß die Methode "toURI()" nicht immer funktioniert. Und das finde ich alles andere als zufriedenstellend! :autsch:
 
Zuletzt bearbeitet:

Zurück
Oben