У меня есть файл json в том же пакете контроллера, и я пытаюсь прочитать файл и преобразовать его в строку
new String(Files.readAllBytes(Paths.get("CustomerOrganization.json")));
Но я получил ошибку:
java.nio.file.NoSuchFileException: CustomerOrganization.json
Путь относится не к местоположению вашего класса, а к месту, где запускается программа. Обычно это корень проекта.
вы также можете попробовать указать относительный путь от корня проекта, например src/.../controllers/CustomerOrganization.json
Если вы хотите узнать путь к файлу относительно вашего класса, вы можете использовать CustomerControllerIT.class.getResource("CustomerOrganization.json")
Если вы ожидаете его в том же пакете, вы должны использовать ресурсы, файлы нет.
Я рекомендую добавить параметр кодировки в вызов "new String(...)", чтобы убедиться, что он читает файл с правильной кодировкой.




Используя в основном те же методы, которые вы использовали:
new String(Files.readAllBytes(Paths.get(CustomerControllerIT.class.getResource("CustomerOrganization.json").toURI())));
Однако, если вам нужно, чтобы он работал изнутри JAR, вам нужно будет сделать это вместо этого:
InputStream inputStream = CustomerControllerIT.class.getResourceAsStream("CustomerOrganization.json");
// TODO pick one of the solutions from below url
// to read the inputStream into a string:
// https://stackoverflow.com/a/35446009/1356047
Верно, но это не было запрошено в вопросе.
Тем не менее, если ОП собирается его развернуть, он окажется в банке. Любое решение, связанное с ресурсами, не должно смешиваться с файлами, поскольку проект почти никогда не будет развернут в виде файлов.
Правда, добавил и JAR-решение.
Обход URI будет работать даже из банки, если вы сначала создадите файловую систему. Но следует подчеркнуть, что конструктор String(byte[]) будет использовать системную кодировку по умолчанию, что, безусловно, не является правильным выбором для ресурса, встроенного в приложение Java. Приложение должно быть явным в отношении кодировки ресурса.
Что с кодировкой?
@AlikElzin-kilaka, вы имеете в виду ответ или комментарий Хольгера?
Вы должны указать полный путь в виде URI, как в приведенном ниже фрагменте кода, где файл json находится в том же пакете.
try {
String s = new String(Files.readAllBytes(Paths.get("D:/Test/NTech/src/com/ntech/CustomerOrganization.json")));
System.out.println(s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Для получения дополнительной информации вы можете ознакомиться с документацией по методу public static Path get(URI uri) класса Paths по адресу: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html.
Фрагмент кода ниже должен работать на вас.
Path path = Paths.get(CustomerControllerIT.class.getClassLoader().getResource(fileName).toURI());
byte[] fileBytes = Files.readAllBytes(path);
String fileContent = new String(fileBytes);
Я думаю, вы должны указать полный путь. Где (в вашей файловой системе) хранится этот файл?