以下是应用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 中独有的行打印进去。

请留神,以上代码假如文件内容较小,能够一次性读取到内存中。如果文件较大,可能须要采纳逐行读取和缓存的形式进行比拟,以防止内存溢出。