2010-06-15 2 views
1

Я работаю с файлом около 2G. Я хочу прочитать файл строки за строкой, чтобы найти некоторые конкретные термины. Класс whitch я могу лучше использовать: FileReader или FileInputStream? И как я могу найти конкретные слова эффективно. Я просто использую метод split(), но могу ли я использовать класс java.util.regex.Pattern в сочетании с классом java.util.regex.Matcher.FileReader vs FileInputReader. split vs Pattern

Итак, вопросы: Какой класс я могу использовать: FileReader или FileInputStream? Могу ли я использовать метод split или классы регулярных выражений

У кого-то есть ответ на этот вопрос? Thans.

+0

Что такое FileInputReader? где вы нашли это – Coffee

ответ

0

Вы хотите использовать Reader (возможно, завернутый в BufferedReader), поскольку вы работаете со строковыми данными, а не с двоичным. Вы должны предварительно скомпилировать свой шаблон (Pattern.compile). Помимо этого, неясно из вашего описания, если вы должны использовать Pattern.split, или если использование Матчи будет более уместным.

Обратите внимание, что str.split(regex, limit) эквивалентно Pattern.compile(regex).split(str, limit)

+0

ответ – user360518

4

Наилучшим вариантом был бы использовать BufferedReader (для его методы readLine()) обертываниями InputStreamReader (за его способность указать кодировку) Обертывание FileInputStream (для фактического чтения файл):

BufferedReader br = new BufferedReader(new InputStreamReader(
    new FileInputStream(name), encoding)); 

FileReader использует кодировку по умолчанию платформы, которая, как правило, плохая идея, что делает класс в основном ловушку для разработчиков, которые не знают о потенциале для проблем.

Если вы хотите найти подстроки в строках, String.indexOf() - самый эффективный способ; использование регулярных выражений лучше, если вы действительно ищете конкретные шаблоны.

+0

+1 лучшая практика – leonbloy

+0

ответ – user360518

0

BufferedReader имеет метод readLine(), который может использоваться для чтения по строкам. Классы ReaderWriter) могут использоваться для данных String, где для двоичных данных (байтовых массивов) следует использовать InputStreamOutputStream).

BufferedReader reader = new BufferedReader(new FileReader(file)); 
String line = null; 
while((line = reader.readLine()) != null) { 
    // Do something with the line 
} 
+0

благодарит за ответ – user360518