#java #json #nullpointerexception #resources #executable-jar
#java #json #исключение nullpointerexception #Ресурсы #исполняемый файл-jar
Вопрос:
Мне нужно получить доступ к некоторым данным, которые хранятся в файле Json, который находится в файле ресурсов. Код компилируется в eclipse, но когда я пытаюсь экспортировать и запустить как файл JAR, я получаю это исключение:
Расположение файла Json:
Я пытался использовать:
Thread.currentThread().getContextClassLoader() .getResourceAsStream(«AutomationJson.json»);
или
Thread.currentThread().getContextClassLoader() .getResourceAsStream(«/AutomationJson.json»);
Main(){
InputStream jsonFileStream = getClass().getClassLoader().getResourceAsStream("AutomationJson.json");
String jsonString = readFromJARFile();
jsonData();
}
private void jsonData() {
JsonNode node = null;
try {
node = JsonHelper.parse(jsonString);
} catch (IOException e) {
e.printStackTrace();
}
secondUserName = node.get("secondUserName").asText();
password = node.get("password").asText();
}
public String readFromJARFile() throws IOException {
InputStreamReader isr = new InputStreamReader(jsonFileStream);
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
isr.close();
return sb.toString();
}
Вспомогательный класс Json:
public class JsonHelper {
private static ObjectMapper objectMapper = getDefaultMapper();
static ObjectMapper getDefaultMapper() {
ObjectMapper defaultMapper = new ObjectMapper();
defaultMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return defaultMapper;
}
public static JsonNode parse(String src) throws JsonProcessingException {
return objectMapper.readTree(src);
}
}
Комментарии:
1. В какой строке вашего кода происходит исключение? Это должно быть указано где-то в стеке вызовов исключения. И если вы замените
getRessourceAsStream()
наgetRessource()
, а затем напечатаете возвращаемое значение, соответствует ли напечатанный путь фактическому пути к файлу?2. Строка, в которой вызывается исключение, находится
InputStreamReader isr = new InputStreamReader(jsonFileStream);
в функцииreadFromJARFile
, когда я печатаюgetRessource()
, я получаю URLfile:/D:/Project_File/Project_name/target/classes/AutomationJson.json
-адрес, по которому файл JSON существует в этом файле, и вD:Project_File/Project_namesrcmainresources/AutomationJson.json
@MDK3. Можете ли вы обновить вопрос кодом, который будет компилироваться? В настоящее
jsonFileStream
время даже не передаетсяreadFromJARFile()
методу.