文档章节

Java 12 骚操作, 文件比对居然还能这样玩!

Java技术栈
 Java技术栈
发布于 08/21 09:53
字数 607
阅读 9
收藏 0

Java 13 都快要来了,12必须跟栈长学起!

Java 13 即将发布,新特性必须抢先看!

之前分享了一些 Java 12 的骚操作,今天继续,今天要分享的是 Java 12 中的文件比对骚操作。

我们或多或少会遇到这样的需求:怎么比对两个文件中的内容一样?

你会把两个文件中的内容拉出来一个个字符对比,然后提交一大堆不怎么优雅的代码?

这样你就太 OUT 了!

在 Java 12 中,仅需要 1 行代码即可搞定!

来看示例代码:

public static void main(String[] args) throws IOException {
    Path dir = Paths.get("d:/");

    Path path1 = dir.resolve("javastack1.txt");

    Path path2 = dir.resolve("javastack2.txt");

    long result = Files.mismatch(path1, path2);

    System.out.println(result);
}

Files.mismatch 一行搞定!

javastack1 和 javastack2 的内容都是:

www.javastack.cn

这时候输出结果:-1。

现在把 javastack2 的内容改成:

http://www.javastack.cn

这时候输出结果:0。

再把 javastack2 的内容改成:

www.javastack.cn/

这时候输出结果:16。

Files.mismatch

Files.mismatch方法源码如下:

public static long mismatch(Path path, Path path2) throws IOException {
    if (isSameFile(path, path2)) {
        return -1;
    }
    byte[] buffer1 = new byte[BUFFER_SIZE];
    byte[] buffer2 = new byte[BUFFER_SIZE];
    try (InputStream in1 = Files.newInputStream(path);
         InputStream in2 = Files.newInputStream(path2);) {
        long totalRead = 0;
        while (true) {
            int nRead1 = in1.readNBytes(buffer1, 0, BUFFER_SIZE);
            int nRead2 = in2.readNBytes(buffer2, 0, BUFFER_SIZE);

            int i = Arrays.mismatch(buffer1, 0, nRead1, buffer2, 0, nRead2);
            if (i > -1) {
                return totalRead + i;
            }
            if (nRead1 < BUFFER_SIZE) {
                // we've reached the end of the files, but found no mismatch
                return -1;
            }
            totalRead += nRead1;
        }
    }
}
  • 返回-1:同一文件,或者两个文件内容一样
  • 返回其他数字:文件内容对比差异的位置,从0开始

所以,只要返回 -1,说明文件内容相同。

好了,今天的分享就到这,记住了,别说我没告诉你。。

收藏转发一下吧,多学习了解,日后必定有用!

历史 Java 新特性干货分享:

获取上面这份 Java 8~12 系列新特性干货文章,请在微信搜索关注微信公众号:Java技术栈,在公众号后台回复:java。

本文原创首发于微信公众号:Java技术栈(id:javastack),转载请原样保留本信息。

© 著作权归作者所有

Java技术栈
粉丝 183
博文 176
码字总数 154798
作品 0
深圳
架构师
私信 提问
Java 8 创建 Stream 的 10 种方式,我保证你受益无穷!

之前栈长分享过 Java 8 一系列新特性的文章,其中重点介绍了 Stream. 获取上面这份 Java 8~12 系列新特性干货文章,请在微信搜索关注微信公众号:Java技术栈,在公众号后台回复:java。 今天...

Java技术栈
07/17
103
0
自动【打地鼠】游戏的JAVA应用程序制作的思路(给路大神请帮忙)

自动打地鼠的JAVA应用程序 最近接触了一个游戏叫打地鼠 这个游戏在windows的一个窗口中单独运行的。 这个小地鼠在不同的洞穴钻出来,我们要拿锤子不断的去砸他才可以得分,能否通过JAVA来实现...

我不明白
2013/02/21
2.2K
6
Scala和Java在多核处理性能的一次对比和思考

今天在网络上看到了一篇关于Scala和java多线程对比的文章《Simple Scala actor Vs java Thread Vs Kilim Test,原文链接:http://www.blogjava.net/BlueDavy/archive/2009/11/25/303662.html......

qinhui99
2012/05/13
1K
3
-bash: ./java: 权限不够

上周,ubuntu 提示我, 有重要更新,手贱点了确定,感觉很随意的一个更新操作, 之后却发现升级后系统标示从14.04 变到14.10 。一系列蛋疼的事情出现了,右上角所有的可见的按钮都变成了灰色...

灰暗
2015/03/27
65
0
关于系统文件监视的几个问题(一)-方案选择

最近遇到一个关于系统文件监视的问题:如何做到对文件的修改、新增、删除做监视然后通知用户,然后有两个核心的问题,1.如何监视的时候不发生I/O或者少发生I/O;2.对文件修改可能是非法的因此...

从前
2013/05/30
240
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
3分钟前
2
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
6分钟前
5
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
8分钟前
2
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
9分钟前
5
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
24分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部