[JAVA] Wenn ich die Datei mit der Klasse # getResource aus der JAR-Datei aufrufe, wird sie nicht gefunden und ist ein beschissenes Memorandum

Problemereignis

Platzieren Sie eine Binärdatei im Ressourcenverzeichnis für ein unkonventionelles Java-Projekt.

FileInputStream stream = new FileInputStream(getClass().getResource("/hoge.bin").getPath());

Ich habe ein Programm geschrieben, um es in einer solchen Form aufzurufen und zu verwenden. In der IDE funktioniert es einwandfrei. Wenn ich es also mit mvn in ein Glas stecke und es von außen aufrufe, erhalte ich eine Ausnahme "Nicht gefunden".

Wenn ich das Glas entpacke, befindet sich definitiv "hoge.bin" direkt darunter. Andere Eigenschaftendateien im selben Verzeichnis können gelesen werden. .. ..

Lösung

Verwenden Sie "Class # getResourceAsStream" anstelle von "Class # getResource".

InputStream stream = getClass().getResourceAsStream("/hoge.bin");
```

 Nachfolgende Programme müssen möglicherweise geändert werden, je nachdem, wie der InputStream verwendet wird.

 Why?

 Antwort hier: https://stackoverflow.com/a/941785
 Dateien, die in jar konsolidiert wurden, können nicht als einzelne Dateien behandelt werden und müssen in Form von Stream referenziert werden.
 Ich würde gerne ein etwas ernsthafteres Dokument lesen, aber ich bin es leid, dieses Mal so süchtig danach zu sein.

## Warum bist du so verrückt geworden?

 Es hat eine Multiprojektstruktur, die von maven verwaltet wird, und der Eintrag ist für Projekt A, aber die Ressourcen sind für Projekt B, daher hat es einige Zeit gedauert, das Problem zu identifizieren, da ich dachte, es sei ein Fehler in meinen Einstellungen.


Recommended Posts

Wenn ich die Datei mit der Klasse # getResource aus der JAR-Datei aufrufe, wird sie nicht gefunden und ist ein beschissenes Memorandum
21 Lesen Sie das Skript aus der Datei und führen Sie es aus
Memorandum: Als ich TensorFlow mit Tribuo ausprobierte, funktionierte es nicht, also machte ich mich auf den Weg, um die Hauptfamilie zu finden, und verlor.
UnsupportedClassVersionError wurde ausgegeben, als ich die mit Eclipse erstellte .war-Datei auf EC2 platzierte und ausführte.
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
Erstellen Sie mit dem Befehl eine JAR-Datei
Wenn ich die Internationalisierung mit Spring Boot unterstütze, bin ich süchtig danach, kein bestimmtes Gebietsschema zu übersetzen
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
Wenn ich den Quellbefehl im Makefile von Ubuntu ausführe, erhalte ich "source: Befehl nicht gefunden".
Was zu tun ist, wenn es ungültig ist, weil es nicht mit einem '-' beginnt
Der Dateipfad wird nicht erkannt, wenn ein externer Befehl von einer Java-App ausgeführt wird
Zum Zeitpunkt des dialogReturn-Ereignisses habe ich überprüft, ob es nicht aktualisiert wird, auch wenn ich eine Komponente mit Aktualisierung angegeben habe
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Ich hatte das Problem, dass JS nach dem Seitenübergang nicht gelesen wird und JS beim Laden gelesen wird.
So laden Sie eine Bibliothek aus einer JAR-Datei mit VSCode << So verwenden Sie Maven / Gradle nicht >>
Wenn eine mit dem Atom-Editor erstellte Java-Datei bei der Ausführung an der Eingabeaufforderung verstümmelt wird
Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java
Ich möchte eine Methode aufrufen und die Nummer zählen
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Konvertieren Sie Excel mit Java in Blob, speichern Sie es, lesen Sie es aus der Datenbank und geben Sie es als Datei aus!
Wenn beim Ausführen einer JAR-Datei der Fehler "Quantum Renderer: Keine geeignete Pipeline gefunden" angezeigt wird