list集合、txt文件对比的工具类和文件读写工具类

工作上经常会遇到处理大数据的问题,下面两个工具类,是在处理大数据时编写的;推荐的是使用map的方式处理两个list数据,如果遇到list相当大数据这个方法就起到了作用,当时处理了两个十万级的list,使用改方法的变种搞定。

1.txt文件、list集合比较工具

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.hudong.util.other;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

/**
 * txt文件对比工具
 * list集合比较工具
 * @Title: TxtCompareUtil.java
 * @Copyright: Copyright (c) 2005
 * @author 杨凯
 */
public class TxtCompareUtil {

    /**
     * 使用两个list包含来对比
     *
     * @param input1
     * @param input2
     * @param output1
     * @param output2
     */
    public static void compareTxt(String input1, String input2, String output1, String output2) {

        List<String> listInput1 = TxtReadWriteUtil.readTxt(input1);
        List<String> listInput2 = TxtReadWriteUtil.readTxt(input2);
        for (String str : listInput1) {
            if (listInput2.contains(StringUtils.upperCase(str)) || listInput2.contains(StringUtils.lowerCase(str)) || listInput2.contains((str))) {
                TxtReadWriteUtil.writerTXT(str, output1, true);
            } else {
                TxtReadWriteUtil.writerTXT(str, output2, true);
            }
        }
    }

    /**
     * 求两个list的交集 通过求交集的方法找出两个txt的共同部分
     *
     * @param input1
     * @param input2
     * @param output1
     * @param output2
     */
    public static void interseTxt(String input1, String input2, String output1, String output2) {
        List<String> listInput1 = TxtReadWriteUtil.readTxt(input1);
        List<String> listInput2 = TxtReadWriteUtil.readTxt(input2);
        if (listInput2.retainAll(listInput1)) {
            System.out.println(listInput2);
            // TxtReadWriteUtil.writerTXT(listInput2, output1, true);
        } else {
            // TxtReadWriteUtil.writerTXT(listInput2, output2, true);
        }
    }

    /**
     * 求两个list的并集 通过求两个list的并集来合并两个txt
     *
     * @param input1
     * @param input2
     * @param output1
     * @param output2
     */
    public static void unionTxt(String input1, String input2, String output1, String output2) {
        List<String> listInput1 = TxtReadWriteUtil.readTxt(input1);
        List<String> listInput2 = TxtReadWriteUtil.readTxt(input2);
        listInput2.removeAll(listInput1); // 移除相同的
        listInput2.addAll(listInput1); // 放入不同的
        System.out.println(listInput2);
    }

    /**
     * 获取两个集合的不同元素
     *
     * @param collmax
     * @param collmin
     * @return
     */
    @SuppressWarnings( { "unchecked" })
    public static Collection getDiffent(Collection collmax, Collection collmin) {
        // 使用LinkeList防止差异过大时,元素拷贝
        Collection csReturn = new LinkedList();
        Collection max = collmax;
        Collection min = collmin;
        // 先比较大小,这样会减少后续map的if判断次数
        if (collmax.size() < collmin.size()) {
            max = collmin;
            min = collmax;
        }
        // 直接指定大小,防止再散列
        Map<Object, Integer> map = new HashMap<Object, Integer>(max.size());
        for (Object object : max) {
            map.put(object, 1);
        }
        for (Object object : min) {
            if (map.get(object) == null) {
                csReturn.add(object);
            } else {
                map.put(object, 2);
            }
        }
        for (Map.Entry<Object, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                csReturn.add(entry.getKey());
            }
        }
        return csReturn;
    }

    /**
     * 获取两个集合的不同元素,去除重复
     *
     * @param collmax
     * @param collmin
     * @return
     */
    @SuppressWarnings( {"unchecked"})
    public static Collection getDiffentNoDuplicate(Collection collmax, Collection collmin) {
        return new HashSet(getDiffent(collmax, collmin));
    }

    public static void main(String[] args) {
        unionTxt("e:/test/input1.txt", "e:/test/input2.txt", "e:/test/output1.txt", "e:/test/output1.txt");
    }
}
</span>

2.读写文件的工具类

<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.hudong.util.other;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * txt文件的读写操作工具
 *
 * @Title: TxtReadWriteUtil.java
 * @Copyright: Copyright (c) 2005
 * @author 杨凯
 */
public class TxtReadWriteUtil {

    /**
     * 写txt 方式一
     *
     * @param conent
     * @param txtPath
     * @param isAppend
     */
    public synchronized static void writerTXT(String conent, String txtPath, boolean isAppend) {
        try {
            File file = new File(txtPath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            if (!file.exists()) {
                file.createNewFile();
            }
            FileWriter fileWriter = new FileWriter(txtPath, isAppend);
            BufferedWriter bw = new BufferedWriter(fileWriter);
            bw.write(conent);
            bw.newLine();
            fileWriter.flush();
            bw.close();
            fileWriter.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 写txt 方式二
     *
     * @param file
     * @param sb
     */
    public static void createTxt(String file, StringBuffer sb) {
        try {
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("gbk");
            format.setExpandEmptyElements(true);
            format.setTrimText(false);
            FileOutputStream fos = new FileOutputStream(file);
            XMLWriter xmlWriter = new XMLWriter(fos, format);
            xmlWriter.write(sb.toString());
            xmlWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 读txt
     *
     * @param filePath
     * @return
     */
    public static List<String> readTxt(String filePath) {
        List<String> list = new ArrayList<String>();
        try {
            BufferedReader br = new BufferedReader(new FileReader(filePath));
            String line = null;
            while ((line = br.readLine()) != null) {
                list.add(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
}</span>

作者:杨凯专属频道

转载请指明:http://blog.csdn.net/yangkai_hudong

list集合、txt文件对比的工具类和文件读写工具类

时间: 2024-08-03 18:57:14

list集合、txt文件对比的工具类和文件读写工具类的相关文章

linux下自动ftp到服务器对比拷贝指定目录下文件

#!/bin/bash process=8 PWD=`pwd` DAT=`date` ftpip="192.168.1.1" user="ftp_username" password="ftp_password" local_dir="/home/" getlist() { ftp -n $ftpip <<EOF |awk '{print $9}'|sed '/^$/d' >$PWD/list user $u

对于PDF文件压缩怎么操作? PDF文件压缩攻略

PDF文件压缩怎么操作呢?在我们日常工作中,由于工作性质的不同,所要使用到为文件都有大小的限制.如果是在处理PDF文件,需要你将它压缩成比较小的PDF文件,对于其它文件的压缩可能都遇到过,PDF文件就很少有人处理过,下面分享一种PDF文件压缩攻略交给大家! 1.首先压缩PDF文件的话大家可以在浏览器中搜索到PDF压缩工具,然后将它安装到操作的电脑中,考虑到每个工具操作工具方法不同,建议大家使用到同一款软件.2.进入到PDF工具中,可以看到软件界面中分布层次分明,然后可以移动鼠标到左侧"PDF的其

Spring-Boot ? ShapeFile文件读写工具类+接口调用

一.项目目录结构树 二.项目启动 三.往指定的shp文件里写内容 (1) json数据[Post] { "name":"test", "path":"c:/test", "geom":"MULTIPOLYGON(((101.870371 25.19228,101.873633 25.188183,101.880564 25.184416,101.886808 25.186028,101.89204

文件夹差异文件对比工具 meld

/***************************************************************************************** * 文件夹差异文件对比工具 meld * 说明: * 之前就听说Lee使用文件夹文本差异对比软件winmerge,不过如果要在Linux下使用,那么就要 * 装wine才行了,索性还是换一个在Linux下通用的比较好,于是选择了meld. * * 2016-9-15 深圳 南山平山村 曾剑锋 ************

文件对比工具有哪些用途

我们常常会遇到一些文件需要进行比较,特别是一些文本.网页.复杂的源代码文件或者是文件夹,我们非常迫切地需要一款工具可以清晰地分析出它们之间的全部差异,便于对其进行修改或参考. Beyond Compare就是一款这样专业级文件比较软件,我们常常会在一些开发高手和前辈的推荐中听到它的大名.当打开文件对比工具Beyond Compare主页面时,可以看到软件可执行的比较会话类型丰富,那么作为软件新手的你,你的打开方式正确吗?你知道Beyond Compare有哪些强大的比较会话吗? Beyond C

哪款文件对比工具用起来比较简单

在平时学习和工作的过程中,我们或许经常需要对两个文件进行比较,包括两张图片的对比.两个文本之间的对比.两个音乐之间的对比.表格数据的对比.注册表文件的对比等等,仔细想来对比需求是无处不在的. 大多时候我们应该都是纯人力操作,比如用肉眼来辨别图片之间的不同,用耳朵来判断音频之间的不同.虽然这种方法很直接,但是在电脑上这么做实在是太原始了,对比速度也是十分的缓慢,今天小编就为大家推荐一款专业的文件和文件夹对比工具:Beyond Compare. Beyond Compare使用地址参考:http:/

文件夹和文件对比工具

1.Beyond compare 适用系统:Win8.1/Win8/Win7/Vista/Win2003/WinXP 链接:http://baoku.360.cn/soft/show/appid/102794 优点:继承了原 2.0 的文本比较的强大功能(支持标注行号以任意颜色标注差异同步差异)更加强化了在文件夹对比时的多文件操作.不再以原来的多窗口方式.而是采用了流行的标签卡方式.另多个文件的比较得心应手!此外 3.0 还将增加以往只使用插件才能实现的功能: 强大的 hex 比较-快速的装载并

Android之文件读写工具类

本工具类永久维护,永久更新,如果各位读者发现有bug或者不合理之处,欢迎指正,博主将第一时间改正. 以下是主要内容,本类主要功能有: 1.创建文件功能: 2.向文件中写入字节数组: 3.向文件中写入字符串: 4.从文件中读取字节数组: 5.从文件中读取字符串: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; /** * 文件读写工具类 * * @author bear *

Fedora 25文件对比、目录对比工具——Meld——Linux平台的对比工具

处理文件的时候,经常遇到两个非常相似的文件,需要对比.修改.Meld就是专门做这个工作的一款工具.Meld是一个可视的diff和合并工具.Meld是Linux软件,用户使用它可以比较2至3个文件并进行编辑,也可以比较2至3个文件夹并同时进行文件对比. 在Fedora 25上安装Meld: #dnf install -y meld 安装完成后即可启动使用.打开后可以看到,既可以对比文件,也可以对比目录. 可视化做的很好,意思很明确,即使不懂英文同样很容易理解.可以找几个文件测试一下: 还可以直接在