2017-06-06 30 views
8

Używam Spring Boot i json-schema-validator. Próbuję odczytać plik o nazwie jsonschema.json z folderu resources. Próbowałem na kilka różnych sposobów, ale nie mogę go uruchomić. To jest mój kod.Odczytaj plik z folderu zasobów w Spring Boot

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

To jest lokalizacja pliku.

enter image description here

I tu widzę plik w folderze classes.

enter image description here

Ale kiedy uruchomić kod pojawia się następujący błąd.

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

Co to jest źle robię w moim kodzie?

+0

można spróbować? 'ClassLoader classLoader = getClass(). GetClassLoader(); \t JsonNode mySchema = JsonLoader.getJson (classLoader.getResourceAsStream ("jsonschema.json")); ' – harshavmb

Odpowiedz

9

Bardzo krótka odpowiedź: szukasz nieruchomości w zakresie danej klasy loader zamiast kierować klasę. To powinno działać:

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

również zobaczyć:

PS: może wystąpić problem, jeśli projekt został skompilowany na jednym komputerze, a następnie uruchomiony na innym lub uruchomiona aplikacja w Dockerze. W takim przypadku ścieżki do folderu zasobów mogą być nieprawidłowe. W tym przypadku lepiej byłoby do określenia ścieżki do zasobów w czasie wykonywania:

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

' getClass(). GetResource ("jsonschema.json") 'zwraca' null'. Próbowałem również 'ClassPathResource res = new ClassPathResource (" jsonschema.json ")', które po prostu zwraca 'jsonschema.json'. Czy to ma coś wspólnego z tym, że używam Spring Boot? – g3blv

+0

nie, to jest wspólne podejście –

0

zatrzymany w tym samym numerze co pomaga mi

URL resource = getClass().getClassLoader().getResource("jsonschema.json"); 
JsonNode jsonNode = JsonLoader.fromURL(resource); 
+0

w rzeczywistości jest to prawie taka sama jak podana odpowiedź po więcej informacji zobacz tutaj https://stackoverflow.com/questions/14739550/difference-between-getclass-getclassloader-getresource-and-getclass -getres –