3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
將第一個(gè)文件加載到 List<String> 用戶中。
將第二個(gè)文件加載到 List<String> users2 中。
使用 apache 公共集合
CollectionUtils.removeAll(Collection<E> users, Collection<?> users2)
這僅在文件大小可以加載到內(nèi)存中時(shí)才有效。否則,它需要另一種方法,例如使用命令行命令對(duì)兩個(gè)文件進(jìn)行排序
sort
,并逐行瀏覽兩個(gè)文件并決定是否寫入輸出。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用 BeyondCompare 來(lái)比較兩個(gè) csvs。它將明確識(shí)別丟失的用戶以及其他不匹配的數(shù)據(jù)(如果有)。如果您想以編程方式執(zhí)行此操作,則可以在將 csv 復(fù)制到 bean 列表/映射后創(chuàng)建一個(gè)用戶 bean(并重寫 equals 方法來(lái)比較用戶名或任何其他您想要的)。

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
我看到的最好的方式,
1)使用Java NIO Api(實(shí)際上非常快)分別讀取兩個(gè)文件并將它們存儲(chǔ)到列表中。
Path path = Paths.get("src/main/resources/shakespeare.txt");
try {
Files.lines(path).forEach(System.out::println);//print each line
} catch (IOException ex) {
ex.printStackTrace();//handle exception here
}
2) 使用 java 8 預(yù)測(cè)器比較兩個(gè)列表。
public static List < String > filterAndGetEmployees(List < String> employees,
Predicate < String > predicate) {
return list.stream().filter(predicate).collect(Collectors. < String > toList());
}
3)如果你想再次寫文件,你可以去,
Path path = Paths.get("src/main/resources/shakespeare.txt");
try(BufferedWriter writer = Files.newBufferedWriter(path, Charset.forName("UTF-8"))){
writer.write("To be, or not to be. That is the question.");
}catch(IOException ex){
ex.printStackTrace();
}
希望對(duì)你有幫助..
添加回答
舉報(bào)