14.08.2014

Инструменты под рукой - несколько удобных Java библиотек.

Одним из следствий популярности Java является несметное количество библиотек для этого языка, на все случаи жизни. Ввод/вывод, работа с файловыми архивами, парсеры различных форматов данных и прочее. Java - язык созданный для программистов, ориентированный в том числе на скорость разработки. Множество доступных библиотек делают разработку еще более быстрой. Кроме того, во многих случаях это снижает вероятность появления типичных ошибок в коде. Хочу привести четыре Java библиотеки, которые хорошо зарекомендавали себя на практике, которые мне приходилось использовать чаще всего при работе с Java SE и которые мне понравились больше всего. Само собой - вы можете найти еще множество хороших библиотек, которые подходят именно вам, а возможно - заменяют приведенные библиотеки. 

Apache Commons IO

Сайт: http://commons.apache.org/proper/commons-io/

Проект Apache Commons включает в себя очень много составляющих и Commons IO - лишь малая часть. С одной стороны - это настолько популярная библиотека, что наверное не нуждается в представлении. Но с другой - ее просто нельзя не упомянуть! Apache Commons IO, как можно догадаться по названию, служит для задач ввода/вывода. Широко и давно используется в мире Java, а значит - хорошо отлажена.

Посмотрим на пару элементарных примеров c классами IOUtils и FileUtils.

Класс IOUtils служит для работы с классами InputStream, OutputStream, Reader и Writer. Класс FileUtils служит для работы с классом java.io.File. Для того чтобы считать текст из файла с заданной кодировкой UTF-8, нужно написать примерно следующее:

public String readTextFromFile(String path)

 throws Exception {
  final String ENCODING = "UTF-8";
  return FileUtils.readFileToString(new File(path), ENCODING);
}

Удалить директорию и все ее содержимое:

public void removeDir(String path)

 throws Exception {
  FileUtils.deleteDirectory(new File(path));
}

Считать текст из потока:

private String readString(InputStream is) throws IOException {
  final String ENCODING = "UTF-8";
  StringWriter writer = new StringWriter();
  IOUtils.copy(is, writer, ENCODING);
  return writer.toString();
}

Maven Dependency:

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons- io</artifactId>
  <version>2.4</version>
</dependency>

 

Zeroturnaround/zt-zip

Сайт: https://github.com/zeroturnaround/zt-zip

Отличная библиотека для работы с ZIP архивами. С ее помощью можно создать архив или извлечь его содержимое буквально за одну строку кода. Использует возможности пакета java.util.zip.*.

Например, извлечь ZIP архив в директорию с именем, совпадающим с именем файла архива, можно так:

public void unzip(String path) throws Exception {
  ZipUtil.explode(new File(path));
}

Maven Dependency:

<dependency>
  <groupId>org.zeroturnaround</groupId>
  <artifactId>zt- zip</artifactId>
  <version>1.8</version>
  <type>jar</type>
</dependency>


Jsoup: Java HTML Parser

Сайт: http://jsoup.org/

Невероятно удобная библиотека для работы с HTML. Поддерживает реализованный на данный момент стандарт HTML5, как написано на сайте разработчиков - разбирает HTML так, как это делают современные браузеры. Более того, реализована работа с селекторами по аналогии с селекторами JQuery и CSS. Хорошо документирована, на сайте приведено множество примеров.

Вот так можно получить содержимое элемента div с заданным классом divClass из фрагмента HTML кода allText:

public String getDiv(final String allText, final String divClass){

  if (allText == null)
    return null;

  try {
  Document doc = Jsoup.parseBodyFragment(allText);
  Element body = doc.body();
  Element div = body.select("div."+divClass).first();
  String text = div.html();

  return text != null && !text.isEmpty() ? text : allText;

  } catch (Exception e){
  
  System.err.println ("Error while parsing HTML : " + e.getMessage());

  }
return allText;
}

Maven Dependency:

<dependency>
   <!-- jsoup HTML parser library @ http://jsoup.org/ -->
   <groupId>org.jsoup</groupId>
   <artifactId>jsoup</artifactId>
   <version>1.7.3</version>
</dependency>


Thumbnailator

Сайт: https://code.google.com/p/thumbnailator/

Предназначена для создания миниатюр изображений. Когда мне было необходимо создать миниатюры изображений с помощью Java - я пробовал несколько вариантов, и эта библиотека на мой взгляд является одной из лучших. Как по удобству работы, так и по качеству создаваемых миниатюр изображений. Возьму пример, приведенный на сайте проекта, который показывает, насколько просто выглядит создание миниатюр сразу нескольких изображений:

Thumbnails.of(new File("path/to/directory").listFiles())
.size(640, 480)
.outputFormat ("jpg")
.toFiles(Rename.PREFIX_DOT_THUMBNAIL);

Maven Dependency:

<dependency>
   <groupId>net.coobird</groupId>
   <artifactId>thumbnailator</artifactId>
   <version>[0.4, 0.5)</version>
</dependency>


Теги: java programming

comments powered by Disqus