国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了【Java SE】判斷兩個文件內(nèi)容是否相同的多種方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. 逐字節(jié)比較

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

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. 文件摘要(哈希值)比較

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

通過使用 FileChannel 來逐塊讀取文件內(nèi)容,然后逐塊比較讀取的內(nèi)容。這種方法避免了每次讀取數(shù)據(jù)時的數(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;
    }
}

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

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

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

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

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 庫

使用 Apache Commons IO 庫中的FileUtils類提供的 contentEquals() 方法來比較兩個文件的內(nèi)容是否相同。文章來源地址http://www.zghlxwxcb.cn/news/detail-727006.html

import org.apache.commons.io.FileUtils;

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

6. Hutool 庫

import cn.hutool.core.io.FileUtil;

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

到了這里,關(guān)于【Java SE】判斷兩個文件內(nèi)容是否相同的多種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java 判斷兩個List是否包含 判斷兩個list相等

    java 判斷兩個List是否包含 判斷兩個list相等 https://blog.51cto.com/u_12855/7333853 1、直接使用equals()比較 眾所周知,兩個列表具有完全相同的元素并且具有完全相同的順序時,它們是相等的。因此, 如果我們業(yè)務(wù)要求兩個list順序一致,可以使用equals()方法進(jìn)行相等性檢查: 即使

    2024年02月04日
    瀏覽(132)
  • Java 判斷兩個IP段是否有交集

    一、背景介紹 在有些場景,需要判斷IP段是否有交集,比如:配置一些設(shè)備的過濾規(guī)則,避免IP段重復(fù)配置,需要做IP段是否重疊的校驗(yàn)。 IP段有交集的場景有幾種: 1)IP段1包含IP段2; 2)IP段2包含IP段1; 3)IP段1的起始IP與IP段2的結(jié)束IP相同,或者IP段1的結(jié)束IP與IP段2的起始

    2024年02月16日
    瀏覽(18)
  • Java判斷兩個集合是否具有交集以及如何獲得交集

    Java判斷兩個集合是否具有交集以及如何獲得交集

    全限定名為java.util.Collections,在倆個集合沒有交集的時候會返回true,否則返回false。 比如: 結(jié)果: 全限定名為:org.apache.commons.collections.CollectionUtils,兩個集合有交集會返回true,否則會返回false,跟Collections.disjoint相反。 例如: 結(jié)果: 全限定名為:cn.hutool.core.collection.Coll

    2024年02月06日
    瀏覽(31)
  • 【華為機(jī)試真題詳解JAVA實(shí)現(xiàn)】—判斷兩個IP是否屬于同一子網(wǎng)

    【華為機(jī)試真題詳解JAVA實(shí)現(xiàn)】—判斷兩個IP是否屬于同一子網(wǎng)

    ? ? 目錄 一、題目描述 二、解題代碼 IP地址是由4個0-255之間的整數(shù)構(gòu)成的,用\\\".\\\"符號相連。 二進(jìn)制的IP地址格式有32位,例如:10000011,01101011,00000011,00011000;每八位用十進(jìn)制表示就是131.107.3.24 子網(wǎng)掩碼是用來判斷任意兩臺計算機(jī)的IP地址是否屬于同一子網(wǎng)絡(luò)的根據(jù)。 子網(wǎng)

    2023年04月09日
    瀏覽(38)
  • SQL 確定兩個表是否有相同的數(shù)據(jù)

    SQL 確定兩個表是否有相同的數(shù)據(jù)

    描述: 想知道兩個表或兩個視圖里是否有相同的數(shù)據(jù)(行數(shù)和值)。考慮如下所示的視圖。 ?我希望確定該視圖是否和? EMP ?表有完全相同的數(shù)據(jù)。與員工 WARD 相關(guān)的數(shù)據(jù)有兩行,這表明相應(yīng)的解決方案不僅要找出來不同的數(shù)據(jù),還要找到重復(fù)的數(shù)據(jù)。根據(jù)? EMP ?表的數(shù)據(jù),

    2023年04月23日
    瀏覽(23)
  • Collections.disjoint方法,優(yōu)雅進(jìn)行兩個集合有沒有相同的元素判斷

    Collections.disjoint方法,優(yōu)雅進(jìn)行兩個集合有沒有相同的元素判斷

    比較 兩個集合 中 有沒有相同的元素 java.util. Collections.disjoint (Collection? c1, Collection? c2) 以下是結(jié)果:

    2024年02月15日
    瀏覽(37)
  • Java如何判斷某文件目錄是否存在

    在java中如何判斷某文件所在的目錄是否存在,若不存在創(chuàng)建目錄 可以通過國使用 File 類的 getParentFile() 方法來獲取文件所在的目錄,并通過 exists() 方法來判斷該目錄是否存在,若不存在,通過 mkdirs() 方法創(chuàng)建目錄,以下為實(shí)例 或直接簡寫

    2024年02月12日
    瀏覽(176)
  • 判斷兩個數(shù)組是否相等

    在判斷兩個數(shù)組是否相等之前,我們應(yīng)該弄清楚數(shù)組怎樣才算相等,官方給的解釋是這樣的: Returns true if the two specified arrays of ints are equal to one another. Two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. In other

    2024年02月15日
    瀏覽(89)
  • 判斷兩個vector數(shù)組是否相等

    判斷兩個vector數(shù)組是否相等是可以直接使用==或者!=的 因?yàn)関ector內(nèi)部都進(jìn)行了相關(guān)運(yùn)算符的重載,還可以進(jìn)行比較大小 下面這道簡單搜索題就用到了這個性質(zhì),淺看一下吧 【問題描述】給定一個n個整數(shù)的集合X={x1,x2,…xn}(X中可能包含重復(fù)元素)和整數(shù)y,找出和等于y的X的子集

    2024年02月12日
    瀏覽(84)
  • C語言--輸入一個數(shù)判斷是否為素數(shù)(多種方法)

    C語言--輸入一個數(shù)判斷是否為素數(shù)(多種方法)

    ?需要解決這個問題,首先我們要明白 --------什么是素數(shù)? (質(zhì)數(shù))素數(shù)是指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。 舉個例子:4? 可以 由2*2=4? 和1*4 得到,不符合素數(shù)的條件,所以不是素數(shù)。 ? ? ? ? ? ? ? ? ??5? 只能由1*5 得到,符合素數(shù)的

    2024年01月25日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包