Programa Java para eliminar líneas duplicadas en un archivo de texto

Requisito previo: PrintWriter , BufferedReader

Dado un archivo input.txt. Nuestra tarea es eliminar las líneas duplicadas y guardar la salida en un archivo, digamos output.txt

Algoritmo ingenuo:

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 output.txt
   3.3 Run a loop for each line of output.txt
      ->  If  line of output.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
     -> Flush PrintWriter stream

5. Close resources.

Para ejecutar con éxito el siguiente programa, input.txt debe salir en la misma carpeta O proporcionar la ruta completa.

// Java program to remove
// duplicates from input.txt and 
// save output to output.txt
  
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 output.txt
            BufferedReader br2 = new BufferedReader(new FileReader("output.txt"));
              
            String line2 = br2.readLine();
              
            // loop for each line of output.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);
                  
                // flushing is important here
                pw.flush();
            }
              
            line1 = br1.readLine();
              
        }
          
        // closing resources
        br1.close();
        pw.close();
          
        System.out.println("File operation performed successfully");
    }
}

Producción:

File operation performed successfully

Nota: si output.txt existe en cwd (directorio de trabajo actual), el programa anterior lo sobrescribirá; de lo contrario, se creará un nuevo archivo.

Una mejor solución es usar HashSet para almacenar cada línea de input.txt. Como el conjunto ignora los valores duplicados, por lo tanto, al almacenar una línea, verifique si ya está presente en el hashset. Escríbalo en output.txt solo si no está presente en hashset.

Para ejecutar con éxito el siguiente programa, input.txt debe salir en la misma carpeta O proporcionar la ruta completa para ellos.

// Efficient Java program to remove
// duplicates from input.txt and 
// save output to output.txt
  
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 input.txt
        BufferedReader br = new BufferedReader(new FileReader("input.txt"));
          
        String line = br.readLine();
          
        // set store unique values
        HashSet<String> hs = new HashSet<String>();
          
        // loop for each line of input.txt
        while(line != null)
        {
            // write only if not
            // present in hashset
            if(hs.add(line))
                pw.println(line);
              
            line = br.readLine();
              
        }
          
        pw.flush();
          
        // closing resources
        br.close();
        pw.close();
          
        System.out.println("File operation performed successfully");
    }
}

Producción:

File operation performed successfully

Nota: si output.txt existe en cwd (directorio de trabajo actual), el programa anterior lo sobrescribirá; de lo contrario, se creará un nuevo archivo.

Este artículo es una contribución de Gaurav Miglani . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *