Проблема поиска файлов Java - PullRequest
0 голосов
/ 20 марта 2010

Мне нужно найти в файле слово и вернуть целую строку и номер строки с этим словом, затем отредактировать строку и записать обратно в файл. Возможно, номер строки не является необходимым для редактирования строки в файле. Я `читал после поиска с помощью регулярного выражения и открытия файлового канала файла, но я не могу получить номер строки. Может быть, есть и другие лучшие способы сделать это. Можете ли вы помочь мне, как начать это?

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Во-первых, чтобы избежать потенциального заблуждения, вы не можете редактировать файл на лету, просто указав номер строки и изменив ее. Вам нужно будет прочитать содержимое whole и записать содержимое whole обратно в тот же файл любым способом, даже если вам нужно отредактировать только один символ.

Что касается номеров строк, вы можете просто добавить инкрементный счетчик к циклу, в котором вы читаете каждую строку файла, используя BufferedReader#readLine(). Вы также можете использовать LineNumberReader, но на самом деле это не сработает, как ожидается. Так, например, setLineNumber() фактически не пропускает строки к данной строке.

0 голосов
/ 21 марта 2010

Почему бы и нет как:

   BufferedReader reader = new BufferedReader(new FileReader(file));
   BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));

    int lineNo = 0;
    String line;        
    while ((line = reader.readLine()) != null) {
        lineNo++;
        if (line.contains("word")) {
            //manipulate line
            line = "changed content";
        }
        writer.write(line);
    }        

    reader.close();
    writer.close();

или сделайте запись после прочтения всего файла ...

Предупреждение: для правильной обработки кодировки вы должны использовать:

new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
// the same for the writer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...