Pacific
Pacific

Reputation: 195

Find and replace a word in several text files with Java?

How can I find and replace a word in several text files, using Java?

Here's how I do it for a single String...

public class ReplaceAll {

    public static void main(String[] args) {
        String str = "We want replace replace word from this string";  
        str = str.replaceAll("replace", "Done");
        System.out.println(str);
    }
}

Upvotes: 1

Views: 16948

Answers (3)

Nikhil
Nikhil

Reputation: 21

This is the working code: Hope it helps!

import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;


public class TestIO {

 static StringBuilder sbword = new StringBuilder();
 static String dirname = null;
 static File[] filenames = null;
 static Scanner sc = new Scanner(System.in);

public static void main(String args[]) throws FileNotFoundException, IOException{
    boolean fileread = ReadFiles();

    sbword = null;
    System.exit(0);



}
private static boolean ReadFiles() throws FileNotFoundException, IOException{

    System.out.println("Enter the location of folder:");


    File file = new File(sc.nextLine());
    filenames = file.listFiles();
    String line = null;

    for(File file1 : filenames ){
    System.out.println("File name" + file1.toString());
    sbword.setLength(0); 
    BufferedReader br = new BufferedReader(new FileReader(file1));

    line = br.readLine();

    while(line != null){
        System.out.println(line);
        sbword.append(line).append("\r\n");
        line = br.readLine();
        }

    ReplaceLines();
    WriteToFile(file1.toString());

    }

    return true;    
}

private static void ReplaceLines(){
    System.out.println("sbword contains :" + sbword.toString());
    System.out.println("Enter the word to replace from each of the files:");
    String from = sc.nextLine();
    System.out.println("Enter the new word");
    String To = sc.nextLine();

    //StringBuilder sbword = new StringBuilder(stbuff);
    ReplaceAll(sbword,from,To);



}
private static void ReplaceAll(StringBuilder builder, String from, String to){
    int index = builder.indexOf(from);
    while(index != -1){
        builder.replace(index, index + from.length(), to);
        index += to.length();
        index = builder.indexOf(from,index);
    }
}
private static void WriteToFile(String filename) throws IOException{
   try{
    File file1 = new File(filename);
    BufferedWriter bufwriter = new BufferedWriter(new FileWriter(file1));
    bufwriter.write(sbword.toString());
    bufwriter.close();

    }catch(Exception e){
         System.out.println("Error occured while attempting to write to file: " +     e.getMessage());
    }

}

}

Upvotes: 1

aioobe
aioobe

Reputation: 420971

Using FileUtils from Commons IO:

String[] files = { "file1.txt", "file2.txt", "file3.txt" };
for (String file : files) {
    File f = new File(file);
    String content = FileUtils.readFileToString(new File("filename.txt"));
    FileUtils.writeStringToFile(f, content.replaceAll("hello", "world"));
}

Upvotes: 8

RichW
RichW

Reputation: 2024

You can read in the file using a FileReader wrapped by a BufferedReader, pulling it in line by line, perform the same replace on the string that you show in your question, and write it back out to a new file.

Upvotes: 2

Related Questions