FileWriter / BufferedReader Java Word Finder - PullRequest
0 голосов
/ 12 июня 2018

У меня настроен этот код, и я пытаюсь написать программу, которая просматривает файл и находит определенное скрытое секретное слово, а затем заменяет его словом "найдено!"затем перепечатывает текстовый файл в консоли.Я знаю, как использовать читателя и писателя, но я не уверен, как я могу использовать их в унисон, чтобы сделать это.Код выглядит следующим образом:

Класс чтения:

package Main;

import java.io.*;

public class Read {

private static String line;
FileReader in;
File file;

public Read() {
    line = "";
}
public void readFile() throws IOException {
    file = new File("C:examplePathName\\ReadWriteExp.txt");
    in = new FileReader(file);
    BufferedReader br = new BufferedReader(in);
    while((line = br.readLine()) != null) {
        System.out.println(line);
    }
    in.close();
}


public String getLine() {
    return line;
}

public File getFile() {
    return file;
}

}

Класс записи (изменения):

package Main;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Change {

public static void main(String[] args) throws IOException{
    Read r = new Read();

    String line = r.getLine();
    FileWriter fw = new FileWriter(r.getFile());
    while(line != null) {
        if(line.equals("example")) {
            fw.write("found!");

        }
        System.out.println(line);
    }

}

}

Нахожусь ли я на правильном пути или мне следует объединить обаэто в один класс.Кроме того, это правильный способ записи определенной строки в текстовом файле?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Если файл имеет разумный размер, вы можете прочитать его в память, изменить то, что вам нужно, и снова записать его:

public static void replaceOccurrences(String match, String replacement, Path path) throws IOException {
    Files.write(path, Files.lines(path).map(l -> {
        if(l.contains(match)) {
            return l.replace(match, replacement);
        } else {
            return l;
        }
    }).collect(Collectors.toList()));
}

В качестве альтернативы, если вы знаете, что поисковый термин встречается только один рази вам просто нужно найти позицию вхождения, используйте следующее:

try(BufferedReader reader = Files.newBufferedReader(path)) {
    int lineIndex = 0;
    String line;
    while(!(line = reader.readLine()).contains(match)) {
        lineIndex++;
    }
    System.out.println(lineIndex); // line which contains match, 0-indexed
    System.out.println(line.indexOf(match)); // starting position of match in line, 0-indexed
}
0 голосов
/ 12 июня 2018

Если все, что вам нужно сделать, это распечатать преобразованный текст в систему (а не записать его в файл), второй класс на самом деле не нужен.Вы можете выполнить то, что вам нужно, в методе readFile() класса Read:

public void readFile() throws IOException {
  file = new File("C:examplePathName\\ReadWriteExp.txt");
  in = new FileReader(file);
  BufferedReader br = new BufferedReader(in);
  while((line = br.readLine()) != null) {
    System.out.println(line.replaceAll("example", "found!"));
  }
  in.close();
}

Существует множество других настроек, которые вы можете сделать, но это ядро ​​функциональности, указанной вами в вашем вопросе.

...