Câu trả lời rất ngắn gọn: bạn đang tìm kiếm thuộc tính của mình trong phạm vi của một bộ tải lớp cụ thể thay vì lớp đích của bạn. Điều này sẽ hoạt động:
File file = new File(getClass().getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);
Ngoài ra, hãy xem cái này:
Tái bút có thể xảy ra sự cố nếu dự án đã được biên dịch trên một máy và sau đó được khởi chạy trên máy khác hoặc bạn chạy ứng dụng của mình trong Docker. Trong trường hợp này, các đường dẫn đến thư mục tài nguyên của bạn có thể không hợp lệ. Trong trường hợp này, tốt hơn là xác định đường dẫn đến tài nguyên của bạn trong thời gian chạy:
ClassPathResource res = new ClassPathResource("jsonschema.json");
File file = new File(res.getPath());
JsonNode mySchema = JsonLoader.fromFile(file);
Cập nhật từ năm 2020
Trên hết, nếu bạn muốn đọc tệp tài nguyên dưới dạng Chuỗi trong các thử nghiệm của mình, chẳng hạn, bạn có thể sử dụng các phương thức utils tĩnh sau:
public static String getResourceFileAsString(String fileName) {
InputStream is = getResourceFileAsInputStream(fileName);
if (is != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
return (String)reader.lines().collect(Collectors.joining(System.lineSeparator()));
} else {
throw new RuntimeException("resource not found");
}
}
public static InputStream getResourceFileAsInputStream(String fileName) {
ClassLoader classLoader = {CurrentClass}.class.getClassLoader();
return classLoader.getResourceAsStream(fileName);
}
Ví dụ về cách sử dụng:
String soapXML = getResourceFileAsString("some_folder_in_resources/SOPA_request.xml");
ClassLoader classLoader = getClass().getClassLoader(); JsonNode mySchema = JsonLoader.getJson(classLoader.getResourceAsStream("jsonschema.json"));