Java程序删除txt文本文件中的重复行

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)

先决条件: PrintWriterBufferedReader

给定一个文件input.txt。我们的任务是从中删除重复的行并将输出保存在文件output.txt中

过程:

1.为output.txt创建PrintWriter对象
2.为input.txt打开BufferedReader
3.为input.txt的每一行运行一个循环
   3.1 flag = false
   3.2为output.txt打开BufferedReader
   3.3为output.txt的每一行运行一个循环
      - >如果output.txt的行等于input.txt的当前行 
            - > flag = true
            - >打破循环

4.检查标志,如果为false
     - >将input.txt的当前行写入output.txt
     - > Flush PrintWriter流

5.关闭资源。

Java程序删除txt文本文件中的重复行的示例

要成功运行以下程序,input.txt必须到同一文件夹中或为其提供完整路径。

// 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");
    }
}

输出:

File operation performed successfully

注意:如果output.txt存在于cwd(当前工作目录)中,那么它将被上面的程序覆盖,否则将创建新文件。

一个更好的解决方案是使用HashSet的存储input.txt中的每一行。由于set忽略重复值,因此在存储行时,检查它是否已存在于hashset中。只有在hashset中不存在时才将其写入output.txt。

要成功运行以下程序,input.txt必须到同一文件夹中,或者为它们提供完整路径。

// 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");
    }
}

输出:

File operation performed successfully

注意:如果output.txt存在于cwd(当前工作目录)中,那么它将被上面的程序覆盖,否则将创建新文件。

  •   本文标题:Java程序删除txt文本文件中的重复行 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/5019.html
    扫描二维码添加微信 
  • ,领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘优惠券!添加微信后,分享淘宝选中的机械键盘给淘宝机器人即可领取!
    支持我们,就用微信淘宝!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读