Автор оригинала: Pankaj Kumar.
Иногда при работе с файлами нам нужно прочитать файл в строку на Java. Сегодня мы рассмотрим различные способы преобразования файла в строку на Java.
Java считывает файл в строку
Существует множество способов преобразования файла в строку в Java. В этом уроке мы рассмотрим следующие способы.
- Java считывает файл в строку с помощью BufferedReader
- Считывание файла в строку на java с помощью FileInputStream
- Java считывает файл в строку с помощью класса Files
- Считывание файла в строку с помощью Сканера класса
- Java считывает файл в строку с помощью класса FileUtils ввода-вывода Apache Commons
Теперь давайте рассмотрим эти классы и прочитаем файл в строку.
Java считывает файл в строку с помощью BufferedReader
Мы можем использовать метод BufferedReader
|/readLine для чтения файла строка за строкой. Все, что нам нужно сделать, это добавить их в объект
StringBuilder с символом новой строки. Ниже приведен фрагмент кода для чтения файла в строку с помощью BufferedReader.
BufferedReader reader = new BufferedReader(new FileReader(fileName)); StringBuilder stringBuilder = new StringBuilder(); String line = null; String ls = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { stringBuilder.append(line); stringBuilder.append(ls); } // delete the last new line separator stringBuilder.deleteCharAt(stringBuilder.length() - 1); reader.close(); String content = stringBuilder.toString();
Существует еще один эффективный способ преобразования файла в строку с помощью BufferedReader и массива символов .
BufferedReader reader = new BufferedReader(new FileReader(fileName)); StringBuilder stringBuilder = new StringBuilder(); char[] buffer = new char[10]; while (reader.read(buffer) != -1) { stringBuilder.append(new String(buffer)); buffer = new char[10]; } reader.close(); String content = stringBuilder.toString();
Чтение файла в строку на java с помощью FileInputStream
Мы можем использовать поток ввода файлов и массив байтов для чтения файла в строку. Вы должны использовать этот метод для чтения файлов, не основанных на символах, таких как изображения, видео и т.д.
FileInputStream fis = new FileInputStream(fileName); byte[] buffer = new byte[10]; StringBuilder sb = new StringBuilder(); while (fis.read(buffer) != -1) { sb.append(new String(buffer)); buffer = new byte[10]; } fis.close(); String content = sb.toString();
Java считывает файл в строку с помощью класса Files
Мы можем использовать класс утилиты Files для считывания всего содержимого файла в строку в одной строке кода.
String content = new String(Files.readAllBytes(Paths.get(fileName)));
Считывание файла в строку с помощью класса сканера
Класс сканера-это быстрый способ считывания текстового файла в строку на java.
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name()); String content = scanner.useDelimiter("\\A").next(); scanner.close();
Java считывает файл в строку с помощью класса FileUtils ввода-вывода Apache Commons
Если вы используете Apache Commons IO в своем проекте, то это простой и быстрый способ чтения файла в строку на java.
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
Пример чтения файла Java в строку
Вот окончательная программа с правильной обработкой исключений и показывающая все различные способы чтения файла в строку.
package com.journaldev.files; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Scanner; import org.apache.commons.io.FileUtils; public class JavaReadFileToString { /** * This class shows different ways to read complete file contents to String * * @param args * @throws IOException */ public static void main(String[] args) { String fileName = "/Users/pankaj/Downloads/myfile.txt"; String contents = readUsingScanner(fileName); System.out.println("*****Read File to String Using Scanner*****\n" + contents); contents = readUsingApacheCommonsIO(fileName); System.out.println("*****Read File to String Using Apache Commons IO FileUtils*****\n" + contents); contents = readUsingFiles(fileName); System.out.println("*****Read File to String Using Files Class*****\n" + contents); contents = readUsingBufferedReader(fileName); System.out.println("*****Read File to String Using BufferedReader*****\n" + contents); contents = readUsingBufferedReaderCharArray(fileName); System.out.println("*****Read File to String Using BufferedReader and char array*****\n" + contents); contents = readUsingFileInputStream(fileName); System.out.println("*****Read File to String Using FileInputStream*****\n" + contents); } private static String readUsingBufferedReaderCharArray(String fileName) { BufferedReader reader = null; StringBuilder stringBuilder = new StringBuilder(); char[] buffer = new char[10]; try { reader = new BufferedReader(new FileReader(fileName)); while (reader.read(buffer) != -1) { stringBuilder.append(new String(buffer)); buffer = new char[10]; } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } return stringBuilder.toString(); } private static String readUsingFileInputStream(String fileName) { FileInputStream fis = null; byte[] buffer = new byte[10]; StringBuilder sb = new StringBuilder(); try { fis = new FileInputStream(fileName); while (fis.read(buffer) != -1) { sb.append(new String(buffer)); buffer = new byte[10]; } fis.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static String readUsingBufferedReader(String fileName) { BufferedReader reader = null; StringBuilder stringBuilder = new StringBuilder(); try { reader = new BufferedReader(new FileReader(fileName)); String line = null; String ls = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { stringBuilder.append(line); stringBuilder.append(ls); } // delete the last ls stringBuilder.deleteCharAt(stringBuilder.length() - 1); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } return stringBuilder.toString(); } private static String readUsingFiles(String fileName) { try { return new String(Files.readAllBytes(Paths.get(fileName))); } catch (IOException e) { e.printStackTrace(); return null; } } private static String readUsingApacheCommonsIO(String fileName) { try { return FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); return null; } } private static String readUsingScanner(String fileName) { Scanner scanner = null; try { scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name()); // we can use Delimiter regex as "\\A", "\\Z" or "\\z" String data = scanner.useDelimiter("\\A").next(); return data; } catch (IOException e) { e.printStackTrace(); return null; } finally { if (scanner != null) scanner.close(); } } }
Вы можете использовать любой из вышеперечисленных способов чтения содержимого файла в строку на java. Однако это не рекомендуется, если размер файла огромен, потому что вы можете столкнуться с ошибками нехватки памяти.
Рекомендации: