Эволюция Java на примере чтения строк из файла

от автора

Здравствуйте!
Приведу небольшой и интересный, на мой взгляд, пример, как изменилась жизнь простого крестьянина Java разработчика, на примере задачи чтения и печати строк из файла.

Многие из нас помнят

‘до Java 7’ мучения:

        BufferedReader reader = null;         try {             reader = new BufferedReader(                         new InputStreamReader(                             new FileInputStream(FILE_NAME), Charset.forName("UTF-8")));             String line;             while ((line = reader.readLine()) != null) {                 System.out.println(line);             }         } catch (IOException e) {             // log error         } finally {             if (reader != null) {                 try {                     reader.close();                 } catch (IOException e) {                     // log warning                 }             }         } 

которые могли облегчить, разве что

Apache Commons IO

        InputStreamReader in = null;         try {             in = new InputStreamReader(new FileInputStream(new File(FILE_NAME)), Charsets.UTF_8);             LineIterator it = new LineIterator(in);             while (it.hasNext()) {                 System.out.println(it.nextLine());             }         } catch (IOException e) {             // log error         } finally {             IOUtils.closeQuietly(in);         } 

или даже так:

        LineIterator it = null;         try {             it = FileUtils.lineIterator(new File(FILE_NAME), "UTF-8");             while (it.hasNext()) {                 System.out.println(it.nextLine());             }         } catch (IOException e) {             // log error         } finally {             if (it != null) {                 it.close();             }         } 

Java 7

принесла automatic resource management (ARM), NIO.2 и StandardCharsets. Тепреь без подключения сторонних библиотек появилась возможность сделать:

        try (BufferedReader reader = new BufferedReader(                 new InputStreamReader(                         new FileInputStream(FILE_NAME), StandardCharsets.UTF_8))){             String line;             while ((line = reader.readLine()) != null) {                 System.out.println(line);             }         } catch (IOException e) {             // log error         } 

или еще короче:

            List<String> lines = Files.readAllLines(Paths.get(FILE_NAME), StandardCharsets.UTF_8);             for(String line: lines){                 System.out.println(line);             } 

И наконец

Java 8

со своим Stream API и Лямбда-выражениями позволила сделать это в одну строчку:

            Files.lines(Paths.get(FILE_NAME), StandardCharsets.UTF_8).forEach(System.out::println); 

Мораль: если у вас современная Java — надо делать хорошо, и не надо плохо.
Спасибо за внимание и успехов в кодировании!

ссылка на оригинал статьи http://habrahabr.ru/post/269667/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *