Classpath Relativer Pfad einer Resource?

lam_tr

Top Contributor
Hallo zusammen,

ich versuche über den unten angezeigten Code auf eine css Datei zugreifen, wenn ich in Eclipse bin, dann funktioniert es auch. Sobald ich es als Jar ausführe kann, die Datei nicht gefunden werden. Warum nicht?

Code:
css = "<style>"+Files.toString(new File(class.classLoader.getResource("markdownpad-github.css").toString.replace('file:/', '')), Charsets.UTF_8)+"</style>"

In Eclipse: file:\c:\projectname\bin\markdownpad-github.css
Ausführen des Jars: rsrc:markdownpad-github.css

Wieso ist es im Jar ausführen anders wie in der IDE.

Viele Grüße
lam
 
Die Pfade sind anders, weil Teile einer jar keine Datein sind, die im Dateisystem liegen.

Zeig mal deine Dateistruktur inklusive packages.
 
Hallo @mrBrown,

also das Projektstruktur sieht so aus:

Code:
projekt
|- src
      |-- de.hello.world.MyCustomWebView.java
|- resource (wurde in classpath hinzugefügt)
      |--- markdownpad-github.css

Ich hoffe das ist ausreichend.

Grüße
lam
 
Files.toString soll den Inhalt der Datei lesen und in das <style> Tag schreiben.
Wenn die Methode einen String erwartet, der den Pfad zu einer Datei repräsentieren soll, dann kannst du die Methode für deine Zwecke vergessen.
Ich habe zu der Methode auch keine Dokumentation gefunden, daher kann ich nicht sagen, ob es Überladungen gibt, die eventuell eine URL oder einen InputStream annehmen würden.
https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html

In dem Falle musst du also auf altmodische Weise die Datei auslesen.

Java:
StringBuilder css = new StringBuilder();
css.append("<style>");

try(BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getRessourceAsStream("markdownpad-github.css"), "UTF-8"))) {
    String line = null;

    while((line = reader.readLine()) != null) {
        css.append(line);
    }
} catch(Exception exception) {/*Fehlerbehandlung*/}

css.append("</style>");
 
...
Code:
projekt
|- src
      |-- de.hello.world.MyCustomWebView.java
|- resource (wurde in classpath hinzugefügt)
      |--- markdownpad-github.css
...
Code:
File dirUser = new File(System.getProperty("user.dir"));//dirUser gibt Pfad von projekt
File dirResource= new File(dirUser + "/resource");//Pfad von resource
File fileCSS= new File(dirUser + "/resource/markdownpad-github.css");//Pfad von CSS
 
Code:
File dirUser = new File(System.getProperty("user.dir"));//dirUser gibt Pfad von projekt
File dirResource= new File(dirUser + "/resource");//Pfad von resource
File fileCSS= new File(dirUser + "/resource/markdownpad-github.css");//Pfad von CSS
Das funktioniert nicht, wenn die Resourcen in der jar liegen - was der Normalfall sei dürfte.
 
Code:
css = "<style>"+Files.toString(new File(class.classLoader.getResource("markdownpad-github.css").toString.replace('file:/', '')), Charsets.UTF_8)+"</style>"

Die URl, die die getResourec gibt, solltest du nicht in einen String umwandeln und dann verändern - dann ist das eben nicht mehr die gleiche. stattdessen kannst URL#toURI nutzen, und die URI zum erstellen der File nutzen.
 
Die URl, die die getResourec gibt, solltest du nicht in einen String umwandeln und dann verändern - dann ist das eben nicht mehr die gleiche. stattdessen kannst URL#toURI nutzen, und die URI zum erstellen der File nutzen.
So wie ich das verstanden habe liest Files.toString eine Textdatei aus.
Es steht zwar nix davon in der Doku der java.nio.Files es kann sich hierbei jedoch um eine andere Klasse aus einem anderen Package handeln.
 

Neue Themen


Zurück
Oben