最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?SE判斷兩個(gè)文件內(nèi)容是否相同的多種方法代碼

 更新時(shí)間:2023年11月17日 16:04:14   作者:pcdd  
昨天因?yàn)橐獛蛶熜值拿λ钥戳艘幌氯绾闻袛鄡蓚€(gè)文件內(nèi)容是否相同,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Java?SE判斷兩個(gè)文件內(nèi)容是否相同的多種方法,需要的朋友可以參考下

1. 逐字節(jié)比較

逐字節(jié)比較文件內(nèi)容。這種方法適用于小文件,但對(duì)于大文件會(huì)比較耗時(shí)。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public boolean areFilesEqual(Path file1, Path file2) throws IOException {
    return Files.mismatch(file1, file2) == -1;
}
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;

public boolean areFileContentsEqual(Path file1, Path file2) throws IOException {
    byte[] content1 = Files.readAllBytes(file1);
    byte[] content2 = Files.readAllBytes(file2);
    return Arrays.equals(content1, content2);
}
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;

public static boolean areFileContentsEqual(Path file1, Path file2) throws IOException {
    try (InputStream is1 = Files.newInputStream(file1);
         InputStream is2 = Files.newInputStream(file2)) {
        int byte1, byte2;
        
        do {
            byte1 = is1.read();
            byte2 = is2.read();
            if (byte1 != byte2) {
                return false;
            }
        } while (byte1 != -1);
        
        return true;
    }
}

2. 文件摘要(哈希值)比較

計(jì)算文件的哈希值(如 MD5、SHA-256 等),然后比較兩個(gè)文件的哈希值。如果哈希值相同,則可以認(rèn)為文件內(nèi)容相同。這種方法適用于大文件,因?yàn)橹恍枰容^哈希值而不是整個(gè)文件內(nèi)容。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public boolean areFilesEqual(byte[] input1, byte[] input2) throws IOException, NoSuchAlgorithmException {
    MessageDigest md5 = MessageDigest.getInstance("MD5");

    byte[] file1Hash = md5.digest(input1);
    byte[] file2Hash = md5.digest(input2);

    return MessageDigest.isEqual(file1Hash, file2Hash);
}

3. FileChannel

通過(guò)使用 FileChannel 來(lái)逐塊讀取文件內(nèi)容,然后逐塊比較讀取的內(nèi)容。這種方法避免了每次讀取數(shù)據(jù)時(shí)的數(shù)組復(fù)制。

public boolean areFileContentsEqual(Path file1, Path file2) throws IOException {
    try (FileChannel channel1 = FileChannel.open(file1, StandardOpenOption.READ);
         FileChannel channel2 = FileChannel.open(file2, StandardOpenOption.READ)) {

        long size1 = channel1.size();
        long size2 = channel2.size();

        if (size1 != size2) {
            // File sizes are different, contents cannot be equal
            return false;
        }

        ByteBuffer buffer1 = ByteBuffer.allocateDirect(8192);
        ByteBuffer buffer2 = ByteBuffer.allocateDirect(8192);

        while (channel1.read(buffer1) != -1) {
            buffer1.flip();
            channel2.read(buffer2);
            buffer2.flip();

            if (!buffer1.equals(buffer2)) {
                // File contents are not equal
                return false;
            }

            buffer1.clear();
            buffer2.clear();
        }

        return true;
    }
}

在上述代碼中,我們打開(kāi)兩個(gè)文件的 FileChannel,然后按照指定的緩沖區(qū)大?。ɡ?192字節(jié))逐塊讀取兩個(gè)文件的內(nèi)容,并進(jìn)行比較。如果任何一塊內(nèi)容不相等,則立即返回 false 表示文件內(nèi)容不同。如果整個(gè)文件的內(nèi)容都比較完畢且沒(méi)有發(fā)現(xiàn)不同之處,則返回 true 表示文件內(nèi)容相同。

請(qǐng)注意,這種方法適用于大文件,因?yàn)樗梢员苊庖淮涡约虞d整個(gè)文件到內(nèi)存中,而是按塊逐個(gè)比較文件內(nèi)容。根據(jù)具體需求和性能要求,你可以調(diào)整緩沖區(qū)大小以優(yōu)化比較速度。

4. 文件元數(shù)據(jù)比較

比較文件的元數(shù)據(jù),包括文件名、文件大小、修改時(shí)間等。這種方法快速簡(jiǎn)單,適用于需要快速確定文件是否相同的場(chǎng)景。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;

public boolean areFilesEqual(Path file1, Path file2) throws IOException {
    BasicFileAttributes attrs1 = Files.readAttributes(file1, BasicFileAttributes.class);
    BasicFileAttributes attrs2 = Files.readAttributes(file2, BasicFileAttributes.class);

    return attrs1.size() == attrs2.size() &&
           attrs1.lastModifiedTime().equals(attrs2.lastModifiedTime());
}

5. Apache Commons IO 庫(kù)

使用 Apache Commons IO 庫(kù)中的FileUtils類提供的 contentEquals() 方法來(lái)比較兩個(gè)文件的內(nèi)容是否相同。

import org.apache.commons.io.FileUtils;

public boolean areFilesEqual(File file1, File file2) throws IOException {
    return FileUtils.contentEquals(file1, file2);
}

6. Hutool 庫(kù)

import cn.hutool.core.io.FileUtil;

public boolean areFilesEqual(File file1, File file2) throws IOException {
    FileUtil.contentEquals(file1,file2)
}

總結(jié) 

到此這篇關(guān)于Java SE判斷兩個(gè)文件內(nèi)容是否相同的多種方法的文章就介紹到這了,更多相關(guān)Java SE判斷文件內(nèi)容相同內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java裝飾者模式的深入了解

    Java裝飾者模式的深入了解

    這篇文章主要為大家介紹了Java裝飾者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息

    SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息

    在一次項(xiàng)目開(kāi)發(fā)中,使用到了Netty網(wǎng)絡(luò)應(yīng)用框架,以及MQTT進(jìn)行消息數(shù)據(jù)的收發(fā),這其中需要后臺(tái)來(lái)將獲取到的消息主動(dòng)推送給前端,所以本文記錄了SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息的操作,需要的朋友可以參考下
    2024-02-02
  • Spring注解中@Configuration和@Component到底有啥區(qū)別

    Spring注解中@Configuration和@Component到底有啥區(qū)別

    之前一直搞不清@Component和@Configuration這兩個(gè)注解到底有啥區(qū)別,一直認(rèn)為被這兩修飾的類可以被Spring實(shí)例化嘛,最近終于弄明白了,這篇文章主要給大家介紹了關(guān)于Spring注解中@Configuration和@Component到底有啥區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Java實(shí)現(xiàn)桌面日歷

    Java實(shí)現(xiàn)桌面日歷

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)桌面日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • IntelliJ IDEA 無(wú)法正常使用SVN的問(wèn)題和完美解決辦法

    IntelliJ IDEA 無(wú)法正常使用SVN的問(wèn)題和完美解決辦法

    這篇文章主要介紹了IntelliJ IDEA 無(wú)法正常使用SVN的問(wèn)題和解決辦法,本文給大家分享完美解決方案,通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java檢測(cè)網(wǎng)絡(luò)是否正常通訊

    Java檢測(cè)網(wǎng)絡(luò)是否正常通訊

    在網(wǎng)絡(luò)應(yīng)用程序中,檢測(cè)IP地址和端口是否通常是必要的,本文主要介紹了Java檢測(cè)網(wǎng)絡(luò)是否正常通訊,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • springSecurity實(shí)現(xiàn)簡(jiǎn)單的登錄功能

    springSecurity實(shí)現(xiàn)簡(jiǎn)單的登錄功能

    這篇文章主要為大家詳細(xì)介紹了springSecurity實(shí)現(xiàn)簡(jiǎn)單的登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java多線程中synchronized的工作原理

    Java多線程中synchronized的工作原理

    這篇文章主要介紹了Java多線程中synchronized的工作原理,本期講解 synchronized 工作的原理以及常見(jiàn)的鎖優(yōu)化機(jī)制,相信大家在看完這篇博文后對(duì) synchronized 工作流程有一定的理解,需要的朋友可以參考下
    2023-07-07
  • Java調(diào)用opencv實(shí)現(xiàn)圖片矯正功能

    Java調(diào)用opencv實(shí)現(xiàn)圖片矯正功能

    這篇文章主要為大家詳細(xì)介紹了Java如何調(diào)用opencv實(shí)現(xiàn)圖片矯正功能,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • SpringBoot整合Swagger和Actuator的使用教程詳解

    SpringBoot整合Swagger和Actuator的使用教程詳解

    Swagger 是一套基于 OpenAPI 規(guī)范構(gòu)建的開(kāi)源工具,可以幫助我們?cè)O(shè)計(jì)、構(gòu)建、記錄以及使用 Rest API。本篇文章主要介紹的是SpringBoot整合Swagger(API文檔生成框架)和SpringBoot整合Actuator(項(xiàng)目監(jiān)控)使用教程。感興趣的朋友一起看看吧
    2019-06-06

最新評(píng)論

军事| 东兴市| 简阳市| 神农架林区| 峨山| 临夏市| 秭归县| 图木舒克市| 海林市| 义乌市| 卫辉市| 濮阳市| 江陵县| 黄大仙区| 汤阴县| 吉安县| 营山县| 尉犁县| 呼图壁县| 六枝特区| 牙克石市| 德昌县| 乌兰县| 西青区| 禄劝| 长岭县| 页游| 陆川县| 综艺| 日土县| 南通市| 额敏县| 静安区| 阿克陶县| 桃源县| 景洪市| 科技| 二连浩特市| 勐海县| 洛川县| 耿马|