读取和丢弃数据 CSV

我有一个 csv,其中一行有不同的用户 (users.csv),另一方面我也有一个 csv 与用户 (users2.csv)。问题是我想“比较”?这两个文档并将用户从 users2.csv 丢弃到 users1.csv(如果它们存在于此文件中)。请想法或建议,我该怎么做?



萧十郎
浏览 112回答 3
3回答

慕田峪7331174

将第一个文件加载到 List<String> 用户中。将第二个文件加载到 List<String> users2 中。使用 apache 公共集合CollectionUtils.removeAll(Collection<E> users, Collection<?> users2)这仅在文件大小可以加载到内存中时才有效。否则,它需要另一种方法,例如使用命令行命令对两个文件进行排序sort,并逐行浏览两个文件并决定是否写入输出。

慕姐4208626

您可以使用 BeyondCompare 来比较两个 csvs。它将明确识别丢失的用户以及其他不匹配的数据(如果有)。如果您想以编程方式执行此操作,则可以在将 csv 复制到 bean 列表/映射后创建一个用户 bean(并重写 equals 方法来比较用户名或任何其他您想要的)。

隔江千里

我看到的最好的方式,1)使用Java NIO Api(实际上非常快)分别读取两个文件并将它们存储到列表中。&nbsp; &nbsp; Path path = Paths.get("src/main/resources/shakespeare.txt");&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; Files.lines(path).forEach(System.out::println);//print each line&nbsp; &nbsp; } catch (IOException ex) {&nbsp; &nbsp; &nbsp; ex.printStackTrace();//handle exception here&nbsp; &nbsp; }2) 使用 java 8 预测器比较两个列表。&nbsp; &nbsp; public static List < String > filterAndGetEmployees(List < String> employees,&nbsp; &nbsp; &nbsp; &nbsp; Predicate < String > predicate) {&nbsp; &nbsp; &nbsp; &nbsp; return list.stream().filter(predicate).collect(Collectors. < String > toList());&nbsp; &nbsp; }3)如果你想再次写文件,你可以去,&nbsp; &nbsp; Path path = Paths.get("src/main/resources/shakespeare.txt");&nbsp; &nbsp; try(BufferedWriter writer = Files.newBufferedWriter(path, Charset.forName("UTF-8"))){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writer.write("To be, or not to be. That is the question.");&nbsp; &nbsp; }catch(IOException ex){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ex.printStackTrace();&nbsp; &nbsp; }希望对你有帮助..
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java