【问题标题】:Read and discard data CSV读取和丢弃数据 CSV
【发布时间】:2019-08-20 08:40:02
【问题描述】:

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

【问题讨论】:

  • 您在解决这个问题时遇到的具体困难是什么?
  • 创建一个用户bean,用opencsv.sourceforge.net或任何其他库将两个文件读入bean列表,比较两个列表。我会按用户名/电子邮件/其他内容从每个列表中制作一个映射,并比较左映射键是否存在于右映射键中。应该不会超过一个小时。

标签: java csv


【解决方案1】:
  • 将第一个文件加载到 List 用户中。
  • 将第二个文件加载到 List users2.
  • 使用 apache commons-collections CollectionUtils.removeAll(Collection<E> users, Collection<?> users2)

要在列表中加载文件,您可以找到灵感here

等等。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我必须将不同 csv 的两行复制到一个地图中,然后通过创建一个仅包含有用信息的新文档将其与 UserBean 进行比较?。
    【解决方案3】:

    我看到的最好的方式,

    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-03-11
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多