有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Process Builder如何在差异之前对2个文件进行排序

我有一个Java进程,可以找到两个CSV之间的差异。它返回已添加/更改/删除的行

代码的主要部分如下:

ProcessBuilder pb = new ProcessBuilder("/usr/bin/diff", file1.toString(), file2.toString());
Process process;
        
try
{
    process = pb.start();
}
...

问题是,如果文件没有事先排序,差异逻辑将不准确。举例来说,假设我有以下两个数据集:

DATA 1               DATA2
"10000,x,x"          "10000,y,y"
"10000,y,y"          "10000,x,x"

清单是一样的,但顺序不同。因此,我当前的逻辑将认为ID为10000的行已更改。应用差异的正确方法是对排序后的数据进行处理,例如

DATA 1               DATA2
"10000,x,x"          "10000,x,x"
"10000,y,y"          "10000,y,y"

我的问题是,什么是Java中的工作实现,它相当于以下内容

diff -> sort(file1) sort(file2)


共 (1) 个答案

  1. # 1 楼答案

    似乎有一个相对简单的解决方案

    String cmd = "diff <(sort " + file1.toString() + ") <(sort " + file2.toString() + ")";
    ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", cmd);
    

    更清楚地说,这相当于

    bash -c 'diff <(sort text2) <(sort text1)'