воскресенье, 19 июля 2009 г.

apache commons io

Мой наивный пост на тему полезности commons.io

Раньше мне приходилось писать много утилит для работы с файлами. В основном - поиск и замена определенных строк в определенных файлах. Я даже свою собственную библиотечку написал и юзал во всех таких утилитных проектах.

Все удивлялся, почему в jdk не входит удобный и простой метод для перебора файлов и работы со строками. И вот как-то читая juick наткнулся на запись ~ "я открыл для себя commons.io, рулез!". И тоже для себя ее открыл :-D

Оказалось, что эта библиотека сократила код всех моих утилит раза в 3! Использовать и изучить ее очень просто! Хоть я и не пользуюсь всеми фишками, хочу о двух из них, для примера, рассказать.


Пример:
Задача #1:
Нам требуется найти все файлы, содержащие строку "hello world" и сохранить список этих файлов.

Решение:
Надо просто написать класс, назовем его "HelloWorldWalker" и унаследовать его от абстрактного класса DirectoryWalker. Переопределяем в нем метод handleFile, в котором "принимаем" только файлы, содержащие искомую строку. Все очень просто.
Использовать его еще проще!
List labelInFiles = new HelloWorldWalker(startDir).findLabelInFiles();

Задача #2:
Надо считать все строки из файла

Решение:
List stringsList = FileUtils.readLines(file);
Проще некуда!

P.S. Похоже commons.io не поддерживает дженерики из java 5, очень жаль
P.P.S. пост just for fun

eclipse variables

Раньше я не понимал, почему в эклипсе все пути организованы относительно workspace-а, а не просто используются абсолютные пути файловой системы. Теперь я понимаю, насколько это удобно!

Например, если носишь свои проекты на флешке, и подключаешь их в эклипс, можно ссылаться к ресурсам относительно workspace-а, и не думать, какую же букву windows присвоила флешке на этот раз.

Чтобы сослаться на какой-то ресурс относительно workspace-а, можно использовать такую переменную: ${workspace_loc}/choose-your-destiny/core/templates/tag_list.html или так: ${workspace_loc:/choose-your-destiny/core/templates/tag_list.html} (то есть на конкретный ресурс внутри проекта)

Единственная проблема, с которой я столкнулся - не везде эти переменные поддерживаются. Но, поскольку eclipse - opensource, можно запросто добавить поддержку variables в любое место!

Делается это вот так:
String absolutePath = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(pathWithVariable);


P.S. Вообще, в последнее время мне кажется, что это не eclipse подстраивается под тебя, а ты подстраиваешься под нее. Многие тулзы подстраивают тебя и твой проект под себя, например, мавен.

Bug in eclipse 3.5 java ee

Обнаружил очень неприятный баг в эклипс-е:
не работает "угадывание" параметров, подставляются просто имена параметров
[does_not_work.png]
В eclipse 3.5 classic эта опция работает как и ожидается

четверг, 9 июля 2009 г.

шаманство с установокой java на linux

Сегодня столкнулся с такой прикольной проблемой:

Скопировал установщик java в /usr, запускаю, пишет:
"You will need atleast 72188 kBytes of Disk Free Please free up the required Disk Space and try again"

Смотрю: df -h
в "/" - нет свободного места
в "/usr" - свободного места несколько гигабайт

смотрю в исходники установочного скрипта:
"DiskSpace=`df k. | Tail -1 | awk '{if ($ 4-/%/) (print $ 3)) else (print $ 4)' `"
If [then] $diskSpace -lt $diskSpaceRequired
Printf "You will need atleast %s kbytes of Disk Free\n" $diskSpaceRequired
Printf "Please free up the required Disk Space and try again\n"

Оказалось, что откуда ты запустишь команду на запуск установщика, там и будет проверяться кол-во свободного места!

Проверка: cd /usr; ./jre-6u14-linux-i586.bin
Успешно!!