Ich möchte nur eine Datei in mein Programm lesen. Die Datei befindet sich ein Verzeichnis über dem Arbeitsverzeichnis bei "../f.fsh". So ist der folgende Code ordnungsgemäß ausgeführt wird, wenn ich es in der IDE ausführenWarum funktioniert getResourceAsStream() in der IDE, aber nicht in der JAR?
String name="../f.fsh";
InputStream is = getClass().getResourceAsStream(name);
InputStreamReader isreader=new InputStreamReader(is);//CRASHES HERE WITH NULL POINTER EXCEPTION
BufferedReader br = new BufferedReader(isreader);
aber wenn ich eine JAR-Datei erstellen, die f.fsh in der es hat Reißverschluss und führen Sie es, es stürzt ab, wenn die Input zu schaffen, da die Input ist Null.
Ich habe eine Reihe von Antworten auf Fragen zu Eingabestreams und JAR-Dateien gelesen, und ich habe herausgefunden, dass ich relative Pfade verwenden sollte, aber das mache ich schon. Von was ich verstehe, kann getResourceAsStream() Dateien relativ zum Stamm des Projekts finden, das ist was ich will. Warum funktioniert es nicht in der JAR? Was läuft falsch, wie kann ich es beheben?
Hat es mit dem Klassenpfad zu tun? Ich dachte, das war nur für die Aufnahme von Dateien außerhalb des jar ausgeführt werden.
Ich habe auch versucht, aber immer noch, schlagen fehl, wenn Sie einen Schrägstrich bei der Umsetzung:
InputStream is = getClass().getResourceAsStream("\\"+name);
ich sah: How to get a path to a resource in a Java JAR file andfound, dass der Inhalt eines JAR kann necesarily nicht als Datei zugänglich sein. Also versuchte ich es mit dem Kopieren der Datei relativ zum Jar (ein Verzeichnis nach oben aus dem Jar), und das schlägt immer noch fehl. Auf jeden Fall möchte ich meine Dateien im Glas lassen und sie dort lesen können. Ich weiß nicht, was schief läuft.
Danke, das macht Sinn. Ich habe meine Dateispeicherorte geändert, und wo sich meine Ressourcen befinden, und es konnte diesen Fehler in der JAR-Datei beheben. Ich hätte nie gedacht, dass Eclipse einen Bug zu meinen Gunsten hatte. Ich danke dir sehr! – AAB