при доступе к файлу Json в jar (java.lang.Исключение NullPointerException)

#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() , я получаю URL file:/D:/Project_File/Project_name/target/classes/AutomationJson.json -адрес, по которому файл JSON существует в этом файле, и в D:Project_File/Project_namesrcmainresources/AutomationJson.json @MDK

3. Можете ли вы обновить вопрос кодом, который будет компилироваться? В настоящее jsonFileStream время даже не передается readFromJARFile() методу.