给定一个文件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 hs = new HashSet();
// 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(当前工作目录)中,那么它将被上面的程序覆盖,否则将创建新文件。