wake-up-neo.net

Lesen Sie die Datei aus dem Ressourcenordner in Spring Boot

Ich benutze Spring Boot und json-schema-validator. Ich versuche, eine Datei namens jsonschema.json aus dem Ordner resources zu lesen. Ich habe ein paar verschiedene Möglichkeiten ausprobiert, aber ich kann nicht, dass es funktioniert. Das ist mein Code.

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);

Dies ist der Ort der Datei.

 enter image description here

Und hier kann ich die Datei im Ordner classes sehen.

 enter image description here

Aber wenn ich den Code ausführte, erhalte ich die folgende Fehlermeldung.

jsonSchemaValidator error: Java.io.FileNotFoundException: /home/user/Dev/Java/Java%20Programs/SystemRoutines/target/classes/jsonschema.json (No such file or directory)

Was mache ich falsch in meinem Code?

24
g3blv

Nachdem ich viel Zeit damit verbracht hatte, dieses Problem zu lösen, fand ich endlich eine Lösung, die funktioniert. Die Lösung verwendet Spring ResourceUtils . Sollte auch für json-Dateien funktionieren.

Danke für die gut geschriebene Seite von Lokesh Gupta: Blog

 enter image description here

package utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;

import Java.io.FileInputStream;
import Java.io.IOException;
import Java.io.InputStream;
import Java.util.Properties;
import Java.io.File;


public class Utils {

    private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class.getName());

    public static Properties fetchProperties(){
        Properties properties = new Properties();
        try {
            File file = ResourceUtils.getFile("classpath:application.properties");
            InputStream in = new FileInputStream(file);
            properties.load(in);
        } catch (IOException e) {
            LOGGER.error(e.getMessage());
        }
        return properties;
    }
}
37
John

Sehr kurze Antwort: Sie suchen Ihre Immobilie im Rahmen eines bestimmten Klassenladers anstelle Ihrer Zielklasse. Das sollte funktionieren:

File file = new File(getClass().getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);

Siehe auch: 

P.S. Es kann ein Problem auftreten, wenn das Projekt auf einem Computer kompiliert wurde und danach auf einem anderen Computer gestartet wurde oder Sie Ihre App in Docker ausführen. In diesem Fall können die Pfade zu Ihrem Ressourcenordner ungültig sein. In diesem Fall ist es besser, den Pfad zu Ihren Ressourcen zur Laufzeit zu bestimmen:

ClassPathResource res = new ClassPathResource("jsonschema.json");    
File file = new File(res.getPath());
JsonNode mySchema = JsonLoader.fromFile(file);
16

erstelle json ordner in ressourcen als unterordner dann füge json datei in ordner hinzu dann kannst du diesen code verwenden: enter image description here

import com.fasterxml.jackson.core.type.TypeReference;

InputStream is = TypeReference.class.getResourceAsStream("/json/fcmgoogletoken.json");

dies funktioniert in Docker.

4

wenn Sie beispielsweise den Ordner config unter Ressourcenordner .__ haben. Ich habe versucht, dass diese Klasse einwandfrei funktioniert

File file = ResourceUtils.getFile("classpath:config/sample.txt")

//Read File Content
String content = new String(Files.readAllBytes(file.toPath()));
System.out.println(content);
3
Ismail

in der gleichen Ausgabe stecken, hilft mir das

URL resource = getClass().getClassLoader().getResource("jsonschema.json");
JsonNode jsonNode = JsonLoader.fromURL(resource);
1
Govind Singh

Siehe meine Antwort hier: https://stackoverflow.com/a/56854431/4453282

import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

Verwenden Sie diese 2 Importe.

Erklären

@Autowired
ResourceLoader resourceLoader;

Verwenden Sie dies in einigen Funktionen

Resource resource=resourceLoader.getResource("classpath:preferences.json");

In Ihrem Fall, wenn Sie die Datei benötigen, können Sie Folgendes verwenden

File file = resource.getFile()

Referenz: http://frugalisminds.com/spring/load-file-classpath-spring-boot/ Wie bereits in den vorherigen Antworten erwähnt, verwenden Sie ResourceUtils nicht, es funktioniert nach der Bereitstellung von JAR nicht. Dies funktioniert sowohl in IDE als auch nach der Bereitstellung

0
sajal rajabhoj

Hier ist meine Lösung. Kann jemandem helfen; 

Es gibt InputStream zurück, aber ich gehe davon aus, dass Sie auch davon lesen können.

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jsonschema.json");
0
Erçin Akçay