为了账号安全,请及时绑定邮箱和手机立即绑定

读取和丢弃数据 CSV

读取和丢弃数据 CSV

萧十郎 2023-06-14 15:56:02
我有一个 csv,其中一行有不同的用户 (users.csv),另一方面我也有一个 csv 与用户 (users2.csv)。问题是我想“比较”?这两个文档并将用户从 users2.csv 丢弃到 users1.csv(如果它们存在于此文件中)。请想法或建议,我该怎么做?
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

  • 将第一个文件加载到 List<String> 用户中。

  • 将第二个文件加载到 List<String> users2 中。

  • 使用 apache 公共集合CollectionUtils.removeAll(Collection<E> users, Collection<?> users2)

  • 这仅在文件大小可以加载到内存中时才有效。否则,它需要另一种方法,例如使用命令行命令对两个文件进行排序sort,并逐行浏览两个文件并决定是否写入输出。


查看完整回答
反对 回复 2023-06-14
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-06-14
?
隔江千里

TA贡献1906条经验 获得超10个赞

我看到的最好的方式,


1)使用Java NIO Api(实际上非常快)分别读取两个文件并将它们存储到列表中。


    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 预测器比较两个列表。


    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();

    }

希望对你有帮助..


查看完整回答
反对 回复 2023-06-14
  • 3 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信