Я читаю большие файлы журнала с помощью BufferedReader в java.I нужно фильтровать содержимое файла и хранить данные в базе данных. пример.Чтение больших файлов и фильтра с помощью contains() java
BufferedReader br=new BufferedReader(new FileReader("test.log"));
String line;
while((line=br.readLine())!=null){
if(line.contains("filter1") || line.contains("filter2") ||
line.contains("filter3") || line.contains("filter4")...){
//creating object and storing using hibernate
}
}
У меня есть более 50 таких фильтров, и проблема возникает при чтении файлов более 100 МБ. Многое время тратится на то, чтобы сопоставить эти строки фильтра.
Я не могу использовать Collection.contains (строка) в качестве фильтров, если условия являются подстроками строки, прочитанной. Затраченное время связано не с IO, а с фильтрацией содержимого и созданием объектов для хранения.
Редактировать 1: - filter1, filter2 только для простоты. В реальных случаях фильтр будет выглядеть как «новый файл», «отчет», «удаленный из папки», «схема», «переместить», «копировать», «добавить в очередь», «уникальный идентификатор» и т. Д. Эти являются конкретным ключевым словом, которое я проверяю, чтобы увидеть, содержит ли строка соответствующие данные для хранения.
Пожалуйста, предложите лучший способ достижения этого.
Попробуйте использовать 'метод containsAny' из' org.apache.commons.lang3.StringUtils' https: //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#containsAny-java.lang.CharSequence-java.lang.CharSequence...- –
Как представлено, там вы не можете сделать, чтобы улучшить его. Если вам нужно проверить, содержит ли строка одну из 50 строк, вам, возможно, придется искать все 50 от начала до конца.Если у вас больше знаний о потенциальной позиции строки или что, если строка A не появляется, то это означает, что строка B не поддерживает и т. Д., Вы можете немного улучшить это. Или вы можете использовать специализированный метод для поиска с помощью trie, чтобы вам не пришлось сканировать всю строку каждой строки. – RealSkeptic