以下是应用Java代码读取本地两个TXT文件,并以行为单位比拟两个文件的不同的示例:
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class FileComparator { public static void main(String[] args) { String fileAPath = "C:/Users/MAO/Desktop/A.txt"; String fileBPath = "C:/Users/MAO/Desktop/B.txt"; List<String> fileALines = readFileLines(fileAPath); List<String> fileBLines = readFileLines(fileBPath); List<String> uniqueLinesInFileA = new ArrayList<>(); for (String line : fileALines) { if (!fileBLines.contains(line)) { uniqueLinesInFileA.add(line); } } List<String> uniqueLinesInFileB = new ArrayList<>(); for (String line : fileBLines) { if (!fileALines.contains(line)) { uniqueLinesInFileB.add(line); } } // 文件A中不在文件B中的行 System.out.println("Lines in file A that are not in file B:"); for (String line : uniqueLinesInFileA) { System.out.println(line); } // 文件B中不在文件A中的行 System.out.println("Lines in file B that are not in file A:"); for (String line : uniqueLinesInFileB) { System.out.println(line); } } private static List<String> readFileLines(String filePath) { List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } catch (IOException e) { e.printStackTrace(); } return lines; }}
用JAVA 8格调能够这样写:
import java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths;import java.util.List;import java.util.stream.Collectors;public class FileComparator { public static void main(String[] args) throws IOException { String fileAPath = "C:/Users/MAO/Desktop/A.txt"; String fileBPath = "C:/Users/MAO/Desktop/B.txt"; List<String> fileALines = Files.lines(Paths.get(fileAPath)) .collect(Collectors.toList()); List<String> fileBLines = Files.lines(Paths.get(fileBPath)) .collect(Collectors.toList()); // 文件A中不在文件B中的行 List<String> uniqueLinesInFileA = fileALines.stream() .filter(line -> !fileBLines.contains(line)) .collect(Collectors.toList()); // 文件B中不在文件A中的行 List<String> uniqueLinesInFileB = fileBLines.stream() .filter(line -> !fileALines.contains(line)) .collect(Collectors.toList()); System.out.println("Lines in file A that are not in file B:"); uniqueLinesInFileA.forEach(System.out::println); System.out.println("Lines in file B that are not in file A:"); uniqueLinesInFileB.forEach(System.out::println); }}
应用Java 8 的 Files.lines()
办法能够间接读取文件的所有行,并返回一个流。而后,能够应用流的各种操作(如 filter 和 collect)对文件进行解决。
两个文件内容如图所示:
打印后果:
Lines in file A that are not in file B:6666Lines in file B that are not in file A:666
请确保替换 fileAPath 和 fileBPath 变量的值为理论的文件门路。以上代码会比拟文件 A 中的每一行是否存在于文件 B 中,并将文件 A 中独有的行打印进去。
请留神,以上代码假如文件内容较小,能够一次性读取到内存中。如果文件较大,可能须要采纳逐行读取和缓存的形式进行比拟,以防止内存溢出。