| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Быстрый поиск подстроки в файле |
| Автор: regen 24.7.2006, 11:22 |
| Добрый день Суть вопроса такова.. Как средствами Java можно усуществить поиск подстроки в файле? В msdos есть команда find. Она именно его и производит. Можно ли из java вызвать эту команду или как осуществить быстрой поиск в файле? Метод считать файл в буффер а потом искать в буффере - не пройдёт.. Файлов очень много в каталоге, и мне необходимо найти файлы в которых есть указанная подстрока... Заранее спасибо за ответ. |
| Автор: batigoal 24.7.2006, 11:38 | ||
Без программного чтения реализовать поиск в файле можно только командой оси, как ты и сам сказал. Для запуска команды пользуйся
, а потом анализируй в программе вывод команды. Разумеется, следует еще не забыть о проблеме кросплатформенности, если она нужна. |
| Автор: regen 24.7.2006, 12:19 |
| Только что попробовал.. Команда find не может найти русскоязычной подстроки.. Т.е. подстрку "Olga" найти может, а подстроку "Ольга" - нет.. Какие тогда идеи насчёт быстрого поиска? |
| Автор: sergejzr 24.7.2006, 12:31 |
| Там всё дело в кодировке. Поиграй с ней. Добавлено @ 12:33 На крайний случай - пиши сам. Ищи с Stream'e. Вот тебе алгоритмов сумка http://www-igm.univ-mlv.fr/~lecroq/string/index.html |
| Автор: batigoal 24.7.2006, 12:44 |
| Первое, что приходит на ум при решении задачи быстрого поиска - это предварительная индексация. Разумеется, это будет затратной операцией с точки зрения добавления/удаления/изменения индексируемых файлов. |
| Автор: tux 24.7.2006, 12:47 | ||
Если нужен поиск по текстовым файлам, может быть пойдет такой метод:
|
| Автор: regen 24.7.2006, 12:56 |
| Да.. Поиск в текстовых файлах....Открытие всех файлов в каталоге и просмотр их... Это понятно... Другими способов нету? Алгоритмы быстрого поиска я знаю... Вот только это опять же "изобретать велосипед" на мой взгляд... |
| Автор: batigoal 24.7.2006, 12:57 |
Ну это все-таки с чтением при каждом поиске... Надо решить, что критичнее - время манипуляции с файлами, или время поиска в них. |
| Автор: tux 24.7.2006, 13:03 | ||
Ну да... Хотя и так не очень долго - по массиву 200 метров - полминуты... В общем ждем автора. |
| Автор: regen 24.7.2006, 13:32 |
| Вообщем описываю всю предисторию: в каталоге около 500 файлов размером в среднем по 3 метра текстовики... есть форма поиска... пользователь вводит туда какую-то строку.. дальше происходит сам поиск насчёт кроссплатформенности... конечные пользователи представители женского пола которым давно за 30... отсюда следует - только виндоус насчёт что критичнее.. золотая середина между быстротой поиска (чтобы пользователь не ждал по полминуты перед экраном) и объёмом потребляемой памяти при этом |
| Автор: tux 24.7.2006, 13:36 |
| Ну тогда действительно смотри в сторону http://lucene.apache.org/java/docs/. Придется периодически индексировать файлы, зато поиск очень быстрый. |
| Автор: regen 24.7.2006, 13:42 |
| Lucene так Lucene.... Хорошо... Разберусь... Открыв ссылку увидел что это что-то из семейства апача... Ни о каком веб-сервере речи не может быть... Если что-то не понял - то извиняйте. И ещё... Lucene индексирует сам файл? Или строки в файлах? И это делается на чьей стороне? (файлы в котором осуществляться поиск будет со временем будут обновляться (закачка с сервера)... пройдёт ли Lucene с этим?) |
| Автор: sergejzr 24.7.2006, 13:44 |
| Беагле кстати сам индексирует по мере добавления. Там 2 версии CSharp и ява. идентичные до этого момента. Т.е индексацию по добавлению может только Шарп (связано с нативными вызовами) |
| Автор: tux 24.7.2006, 13:55 | ||
Apache - это организация, при чем веб-вервер? Номера строк в документах не хранит. Если нужны строки, придется искать что-то другое. |
| Автор: regen 24.7.2006, 14:27 | ||
ошибку понял... был не прав... возвращусь к тому же find... если файлы хранить допустим в шестнадцатеричной форме, то проблемы с русскими символами отпадут.. и find будет работать причём ищет он более-менее быстро... если не прав - поправьте |