Чтение текста , замена определённых слов и запись в новый файл

Всем доброго времени суток. Имею следующую задачу:

Нужно написать программу для проведения поиска и последующей замены слов в тексте , и после - записи в новый файл(txt). Программа должна принимать 3 параметра вызова метода main() : имя файла , строка для поиска и строка для замены. И после выполненных действий записывать новый текст в новый текстовый файл.

P.S. Я ограничен методами классов String , StringBuffer , и StringTokenizer.

P.S.S. Это новый материал в университете , обычно сам разбираюсь но сейчас сроки очень жмут , очень прошу помощи! Заранее спасибо всем неравнодушным:)


Ответы (2 шт):

Автор решения: OlegFrolOff

Как мне кажется, не получится обойтись по крайней мере без использования класса File, например. Иначе не представляю, каким образом читать/писать файлы. В остальном задача довольно тривиальная, могу немного позже и решение написать, если самому разобраться не интересно.

UPD: Вот, нечто рабочее.

package stringchanger;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class StringChanger {

    private String getStringFromFile(String path) {
        StringBuffer sb = new StringBuffer();
        File file = new File(path);
        try (Scanner scan = new Scanner(file)) {
            while (scan.hasNextLine()) {
                sb.append(scan.nextLine());
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(StringChanger.class.getName()).log(Level.SEVERE, null, ex);
        }
        return sb.toString();
    }

    private void writeStringToFile(String path, String string) {
        File file = new File(path);
        String directory = file.getParent();
        File newFile = new File(directory + "new_" + file.getName());

        try (Writer writer = new FileWriter(newFile)) {
            writer.write(string);
        } catch (IOException ex) {
            Logger.getLogger(StringChanger.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private String changeString(String inputString, String replaceValue, String newValue) {
        return inputString.replaceAll(replaceValue, newValue);
    }

    public static void main(String[] args) {
        if (args.length == 3) {
            String path = args[0];
            String value = args[1];
            String newValue = args[2];

            StringChanger sc = new StringChanger();
            String inputText = sc.getStringFromFile(path);
            String changedText = sc.changeString(inputText, value, newValue);
            sc.writeStringToFile(path, changedText);
        }else{
            System.out.println("Некорректные аргументы");
        }
    }
}

Аргументы командной строки для запуска - абсолютный путь к файлу, заменяемый текст, новый текст. Если запускать в командной строке, русский язык лучше не использовать, иначе вероятнее всего работать не будет.

→ Ссылка
Автор решения: Дмитрий Никифоров

Начиная с Java 8 можно лаконично записать через методы класса Files и Stream API:

String path = args[0];
String value = args[1];
String newValue = args[2];

String modifiedPath = "modified " + path;
Stream<String> modifiedLines =
    Files.readAllLines(Paths.get(path)).stream().map(line -> line.replace(value, newValue))
Files.write(Paths.get(modifiedPath), (Iterable<String>) modifiedLines::iterator);
→ Ссылка