(Сам я грешу на разработчиков, как и всегда :D) C кодировкой всё впорядке. Всё работает как нужно.
Для теста использовал такой вот файл и не только его:
<Начало файла>
файл вид \ \ывап саавак В 3
вид чпан фпвл файл самогон 2
письк@ п@ська @иська 0
В вид видон бухло-блэйзер 2
файл файл 2
В В 2
В Валидатор Очень вид Криво Работает файл В 3
выпвыап пывапвы В авыпывыв вид 2
вапывап ппавывапы ыпывавпывапы В В В 3
ывапывап 435234 ывпв 34534 В Вид 2
ывапвыап 0
файл вид члцукан смчсм fсчВ 42342 В 4
выпвыап пывапвы 2342342 авыпывыв вид вапывапыв виммчсипрывар В 2
<Конец Файла>
package com.javarush.task.task19.task1922;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Ищем нужные строки
*/
public class Solution {
public static List<String> words = new ArrayList<String>();
static {
words.add("файл");
words.add("вид");
words.add("В");
}
public static void main(String[] args){
String filename = null;
try(BufferedReader reader1 = new BufferedReader(new InputStreamReader(System.in))) {
filename = reader1.readLine();
}catch (IOException e){e.printStackTrace();}
Matcher matcher;
Pattern pattern = Pattern.compile
("(\\bфайл\\b)|(\\bВ\\b)|(\\bвид\\b)");
try (BufferedReader reader = new BufferedReader(new FileReader(filename))){
String string = null;
while ((string = reader.readLine())!= null){
int count = 0;
matcher = pattern.matcher(string);
while (matcher.find()){
count++;
}
if (count == 2){System.out.println(string);}
}
} catch (FileNotFoundException e){e.printStackTrace();}
catch (IOException e){e.printStackTrace();}
}
}