Чтение текста , замена определённых слов и запись в новый файл
Всем доброго времени суток. Имею следующую задачу:
Нужно написать программу для проведения поиска и последующей замены слов в тексте , и после - записи в новый файл(txt). Программа должна принимать 3 параметра вызова метода main() : имя файла , строка для поиска и строка для замены. И после выполненных действий записывать новый текст в новый текстовый файл.
P.S. Я ограничен методами классов String , StringBuffer , и StringTokenizer.
P.S.S. Это новый материал в университете , обычно сам разбираюсь но сейчас сроки очень жмут , очень прошу помощи! Заранее спасибо всем неравнодушным:)
Ответы (2 шт):
Как мне кажется, не получится обойтись по крайней мере без использования класса 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);