• Tags
  •         
  • 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(当前工作目录)中,那么它将被上面的程序覆盖,否则将创建新文件。

     
    转载请保留页面地址:https://www.breakyizhan.com/java/5019.html