Каковы наилучшие/простые классы, используемые для чтения файлов на Java?

Мне интересна простая обработка строк.

Ответ 1

Сканер:

for(Scanner sc = new Scanner(new File("my.file")); sc.hasNext(); ) {
  String line = sc.nextLine();
  ... // do something with line
}

Ответ 2

Взгляните на класс Scanner.

Он добавлен в Java 5, чтобы сделать строки и файлы чтения намного проще, чем старые цепочки FileReaders и FileInputStream (не более new BufferedReader(new FileReader()), чтобы перейти к методу readLine).

В классе Scanner вы можете использовать метод nextLine для чтения строки за раз, но в ней также есть много методов использования для поиска примитивов и регулярных выражений в файле.

Ответ 3

Вы можете использовать BufferedReader, что-то вроде этого: -

try {
    BufferedReader input = new BufferedReader(new FileReader(new File("c:\\test.txt")));
    try {
        String line = null;
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
    } finally {
        input.close();
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

Ответ 4

Если вы готовы использовать сторонние библиотеки, тогда классы полезности, такие как Files из Guava или FileUtils из Apache Commons IO делает чтение файлов очень простым.

Примеры ниже (где File file = new File("path/to/file.txt")) для чтения всех строк текстового файла в списке и чтения всего файла в строку.

гуавы:

List<String> lines = Files.readLines(file, Charsets.UTF_8);

String contents = Files.toString(file, Charsets.UTF_8);

Apache Commons IO:

List<String> lines = FileUtils.readLines(file, "UTF-8");

String contents = FileUtils.readFileToString(file, "UTF-8")

Моя рекомендация (начиная с 2013 года) Guava, которая является современной, чистой, активно поддерживаемой библиотекой. Это обычно более высокое качество, чем материал Apache Commons.

Конечно, добавление Гува только для этого не имеет смысла, поскольку это относительно большая библиотека. С другой стороны, не используя Guava в Java-проекте сегодня, IMO будет глупым.:-)

По общему признанию, JDK теперь предоставляет несколько адекватных инструментов (Сканер) для этой конкретной цели; использование сторонней библиотеки для чтения файлов было более оправданным, если что-то вроде этого было альтернативой.

Ответ 6

Вы можете попробовать apache FileUtils. такие методы, как

for(String line: FileUtils.readLines(file)) {
   System.out.println(line);
}

Ответ 7

Вы также можете использовать InputStreamReader (который вы создаете с помощью InputStream, например FileInputStream), завернутый в BufferedReader, для простого чтения строки файла.