Thursday, May 9, 2024
HomeLanguagesJavaJava program to delete certain text from a file

Java program to delete certain text from a file

Prerequisite : PrintWriter , BufferedReader

Given two files input.txt and delete.txt. Our Task is to perform file extraction(Input-Delete) and save the output in file say output.txt

Example :


 

Naive Algorithm :

1. Create PrintWriter object for output.txt
2. Open BufferedReader for input.txt
3. Run a loop for each line of input.txt
   3.1 flag = false
   3.2 Open BufferedReader for delete.txt
   3.3 Run a loop for each line of delete.txt
      ->  If  line of delete.txt is equal to current line of input.txt 
            -> flag = true
            -> break loop

4. Check flag, if false
     -> write current line of input.txt to output.txt
5. Flush PrintWriter stream and close resources.

To successfully run the below program input.txt and delete.txt must exits in same folder OR provide full path for them.




// Java program to perform file
// operation output = input-delete
  
import java.io.*;
  
public class FileOperation
{
    public static void main(String[] args) throws IOException 
    {
        // PrintWriter object for output.txt
        PrintWriter pw = new PrintWriter("output.txt");
          
        // BufferedReader object for input.txt
        BufferedReader br1 = new BufferedReader(new FileReader("input.txt"));
          
        String line1 = br1.readLine();
          
        // loop for each line of input.txt
        while(line1 != null)
        {
            boolean flag = false;
              
            // BufferedReader object for delete.txt
            BufferedReader br2 = new BufferedReader(new FileReader("delete.txt"));
              
            String line2 = br2.readLine();
              
            // loop for each line of delete.txt
            while(line2 != null)
            {
                if(line1.equals(line2))
                {
                    flag = true;
                    break;
                }
                  
                line2 = br2.readLine();
            }
              
            // if flag = false
            // write line of input.txt to output.txt
            if(!flag)
                pw.println(line1);
              
            line1 = br1.readLine();
              
        }
          
        pw.flush();
          
        // closing resources
        br1.close();
        pw.close();
          
        System.out.println("File operation performed successfully");
    }
}


Output:

File operation performed successfully

Note : If output.txt exist in cwd(current working directory) then it will be overwritten by above program otherwise new file will be created.

A better solution is to use HashSet to store each line of delete.txt and then while looping through lines of input.txt ,check if it is in hashset. If not present, write that line into output.txt.

To successfully run the below program input.txt and delete.txt must exits in same folder OR provide full path for them.




// Efficient Java program to perform file
// operation output = input-delete
  
import java.io.*;
import java.util.HashSet;
  
public class FileOperation
{
    public static void main(String[] args) throws IOException 
    {
        // PrintWriter object for output.txt
        PrintWriter pw = new PrintWriter("output.txt");
          
        // BufferedReader object for delete.txt
        BufferedReader br2 = new BufferedReader(new FileReader("delete.txt"));
          
        String line2 = br2.readLine();
          
        // hashset for storing lines of delete.txt
        HashSet<String> hs = new HashSet<String>();
          
        // loop for each line of delete.txt
        while(line2 != null)
        {
            hs.add(line2);
            line2 = br2.readLine();
        }
                      
        // BufferedReader object for input.txt
        BufferedReader br1 = new BufferedReader(new FileReader("input.txt"));
          
        String line1 = br1.readLine();
          
        // loop for each line of input.txt
        while(line1 != null)
        {
            // if line is not present in delete.txt
            // write it to output.txt
            if(!hs.contains(line1))
                pw.println(line1);
              
            line1 = br1.readLine();
        }
          
        pw.flush();
          
        // closing resources
        br1.close();
        br2.close();
        pw.close();
          
        System.out.println("File operation performed successfully");
    }
}


Output:

File operation performed successfully

Note : If output.txt exist in cwd(current working directory) then it will be overwritten by above program otherwise new file will be created.

This article is contributed by Gaurav Miglani. If you like Lazyroar and would like to contribute, you can also write an article using contribute.neveropen.co.za or mail your article to contribute@neveropen.co.za. See your article appearing on the Lazyroar main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Nokonwaba Nkukhwana
Experience as a skilled Java developer and proven expertise in using tools and technical developments to drive improvements throughout a entire software development life cycle. I have extensive industry and full life cycle experience in a java based environment, along with exceptional analytical, design and problem solving capabilities combined with excellent communication skills and ability to work alongside teams to define and refine new functionality. Currently working in springboot projects(microservices). Considering the fact that change is good, I am always keen to new challenges and growth to sharpen my skills.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments