Похоже, вы звоните in.readLine()
дважды, один раз в цикле while
и снова в условном. Это заставляет его пропускать все остальные строки. Кроме того, вы хотите использовать String.contains
вместо String.contentEquals
, поскольку вы просто проверяете, содержит ли строка слово . Кроме того, вы хотите подождать, пока весь файл не будет найден, прежде чем решите, что слово не найдено. Итак, попробуйте это:
//try to find the word
BufferedReader in = new BufferedReader(new FileReader("D:/File.txt"));
boolean found = false;
while (( line = in.readLine()) != null)
{
if (line.contains(str))
{
found = true;
break; //break out of loop now
}
}
in.close();
//if word was found:
if (found)
{
System.out.println("Yes");
}
//otherwise:
else
{
System.out.println("No");
//wait until it's necessary to use an output stream
BufferedWriter out = new BufferedWriter(new FileWriter("D:/File.txt",true));
out.newLine();
out.write(str);
out.close();
}
(обработка исключений в моем примере опущена)
РЕДАКТИРОВАТЬ: Я просто перечитал ваш вопрос - если каждая строка содержит ровно одно слово, то equals
или equalsIgnoreCase
будет работать вместо contains
, убедитесь, что для проверки любых пробелов:
перед вызовом
trim
на
line
:
if (line.trim().equalsIgnoreCase(str))
...