Во время разработки приложений Java нам приходится считывать содержимое файла в строку во многих ситуациях, например, при обработке файлов конфигурации, анализе данных или работе с текстовыми ресурсами.
В этом руководстве по Java мы рассмотрим различные способы чтения текстового файла в строку в Java: от традиционного BufferedReader, новых API в Java 8 и 11 до сторонних библиотек, таких как Apache Commons Lang и Guava.
1. Использование Files.readString() – Java 11
Благодаря новому методу readString(), представленному в Java 11, для считывания содержимого файла в строку с использованием кодировки UTF-8 требуется всего одна строка.
- В случае возникновения ошибки во время операции чтения этот метод гарантирует, что файл будет правильно закрыт.
- Он выдает ошибку OutOfMemoryError, если файл очень большой, например, больше 2 ГБ.
Path filePath = Path.of("c:/temp/demo.txt");String content = Files.readString(fileName);
2. Использование Files.lines() – Java 8
Метод lines() считывает все строки из файла в Stream. Stream заполняется лениво, когда поток потребляется.
- Байты из файла декодируются в символы с использованием указанной кодировки.
- Возвращенный поток содержит ссылку на открытый файл. Файл закрывается путем закрытия потока.
- Содержимое файла не должно изменяться в процессе чтения, иначе результат будет неопределенным.
Путь к файлуPath = Path.of("c:/temp/demo.txt");Строка_контента_Строитель = новый Строка_Строитель();попробуйте(Stream<String> stream = Files.lines(Paths.get(filePath), StandardCharsets.UTF_8)) {stream.forEach(s -> contentBuilder.append(s).append("\n"));} поймать(IOException e) {//обработка исключения}Строка fileContent = contentBuilder.toString();
3. Использование Files.readAllBytes() – Java 7
Метод readAllBytes() считывает все байты из файла в byte[]. Не используйте этот метод для чтения больших файлов.
Этот метод гарантирует, что файл будет закрыт, когда все байты будут прочитаны или возникнет ошибка ввода-вывода или другое исключение времени выполнения. После прочтения всех байтов мы передаем эти байты конструктору класса String для создания новой строки.
Путь к файлуPath = Path.of("c:/temp/demo.txt");Строка fileContent = "";пытаться {byte[] байты = Файлы.readAllBytes(Пути.get(Путь_к_файлу));fileContent = новая строка(байты);} поймать(IOException e) {//обработка исключения}
4. Использование BufferedReader – Java 6
Если вы все еще не используете Java 7 или более позднюю версию, то используйте класс BufferedReader. Его метод readLine() считывает файл по одной строке за раз и возвращает содержимое.
Путь к файлуPath = Path.of("c:/temp/demo.txt");Строка fileContent = "";Строка_контента_Строитель = новый Строка_Строитель();попробуйте(BufferedReader br = new BufferedReader(new FileReader(filePath))) {Строка sCurrentLine;пока((sCurrentLine = br.readLine()) != null){contentBuilder.append(sCurrentLine).append("\n");}} поймать(IOException e) {e.printStackTrace();}fileContent = contentBuilder.toString();
5. FileUtils от Commons IO
Мы можем использовать служебные классы, предоставляемые библиотекой Apache Commons IO. FileUtils.readFileToString() — это отличный способ прочитать весь файл в строку в одном операторе.
Файл file = новый Файл("c:/temp/demo.txt");Содержимое строки = FileUtils.readFileToString(файл, "UTF-8");
6. Файлы Гуавы
Guava также предоставляет класс Files, который можно использовать для чтения содержимого файла за один оператор.
Файл file = новый Файл("c:/temp/demo.txt");Содержимое строки = com.google.common.io.Files.asCharSource(file, Charsets.UTF_8).read();
Используйте любой из приведенных выше методов для чтения файла в строку с помощью Java.