Приведу небольшой и интересный, на мой взгляд, пример, как изменилась жизнь простого крестьянина Java разработчика, на примере задачи чтения и печати строк из файла.
Многие из нас помнят
которые могли облегчить, разве что
Или даже так:
принесла automatic resource management (ARM), NIO.2 и StandardCharsets. Теперь без подключения сторонних библиотек появилась возможность сделать:
или еще короче:
И, наконец:
со своим Stream API и Лямбда-выражениями позволила сделать это в одну строчку:
Мораль: если у вас современная 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 — надо делать хорошо, и не надо плохо.
Спасибо за внимание и успехов в кодировании!