I was using commons-io version 2.12.0 and my code worked fine regardless of file size. But when I upgraded to 2.15.0, my code only works with small files. When the file size is 8347 bytes, the comparison works. But, when the file size is bigger than 8348 bytes, the comparison always returns true.
Is this a bug from commons-io library?
I am using Amazon Corretto 11.0.21.9.1 on Windows 10 box.
Here is my sample code.
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class Test15 {
public static void main(String[] args) {
File tmpFile1 = new File("file1.xml");
File tmpFile2 = new File("file2.xml");
try {
boolean filesEqual = FileUtils.contentEquals(tmpFile1, tmpFile2);
System.out.println(filesEqual);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Here is a sample file to compare. They have exact same file size.
<?xml version="1.0" encoding="UTF-8"?>
<PpppppppppppData>
<LooooData>
<Ssssss>
<ProfName>ProfName2</ProfName>
<Version>2</Version>
<TimeStamp>00000000</TimeStamp>
<CcccccDddd>
<GggIiAaaaa>
<Version>33333</Version>
<Site>
<SiteID>4</SiteID>
<Iiii>
<CcAddress></CcAddress>
<CcAddress>0.0.0</CcAddress>
<IpppSuuuuu>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
</Iiii>
<Iiii>
<CcAddress>0:0:0:0:0:0:0:0</CcAddress>
<CcAddress>0:0:0:0:0:0:0:0</CcAddress>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
</Iiii>
</Site>
</GggIiAaaaa>
</CcccccDddd>
</Ssssss>
<Siiiiiiii>ZGVmYXVsdA==</Siiiiiiii>
<PPPPPPP>
<CcrrDddd>ZGVmYXVsdA==</CcrrDddd>
</PPPPPPP>
</LooooData>
</PpppppppppppData>
Another one... notice that only ProfName and Version is different.
<?xml version="1.0" encoding="UTF-8"?>
<PpppppppppppData>
<LooooData>
<Ssssss>
<ProfName>ProfName1</ProfName>
<Version>1</Version>
<TimeStamp>00000000</TimeStamp>
<CcccccDddd>
<GggIiAaaaa>
<Version>33333</Version>
<Site>
<SiteID>4</SiteID>
<Iiii>
<CcAddress></CcAddress>
<CcAddress>0.0.0</CcAddress>
<IpppSuuuuu>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp></RooooooPppppp>
<SuuuuuMaaa></SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
<IpppSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0.0.0.0</RooooooPppppp>
<SuuuuuMaaa>0.0.0.0</SuuuuuMaaa>
</IpppSuuuuu>
</Iiii>
<Iiii>
<CcAddress>0:0:0:0:0:0:0:0</CcAddress>
<CcAddress>0:0:0:0:0:0:0:0</CcAddress>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
<IiiiSuuuuu>
<SsssssIi>8</SsssssIi>
<RooooooPppppp>0:0:0:0:0:0:0:0</RooooooPppppp>
<SuuuuuMaaa>64</SuuuuuMaaa>
</IiiiSuuuuu>
</Iiii>
</Site>
</GggIiAaaaa>
</CcccccDddd>
</Ssssss>
<Siiiiiiii>ZGVmYXVsdA==</Siiiiiiii>
<PPPPPPP>
<CcrrDddd>ZGVmYXVsdA==</CcrrDddd>
</PPPPPPP>
</LooooData>
</PpppppppppppData>
I searched commons-io issue tracking page. I did not find any bug related to this. I have not tried with 2.13.0 or 2.14.0 versions of commons-io