我基本上是新編程,我想做一個程序,在一個文件夾中找到重複的文件(有大量的程序其中一些免費,不關心,我想要做我的程序),問題是什麼禮儀需要2個文件是一個匹配? 起初我想如果他們是MP3,做一個名稱和大小檢查,一個PDF相同,一個TXT相同+實際內容檢查? 而且按照這個順序,我讀了一個地方,首先他們正在檢查大小,然後是其他的東西,這樣對我來說並不合適。 我需要一些其他或更好的想法。什麼標準應該適用於程序找到重複的匹配
謝謝
我基本上是新編程,我想做一個程序,在一個文件夾中找到重複的文件(有大量的程序其中一些免費,不關心,我想要做我的程序),問題是什麼禮儀需要2個文件是一個匹配? 起初我想如果他們是MP3,做一個名稱和大小檢查,一個PDF相同,一個TXT相同+實際內容檢查? 而且按照這個順序,我讀了一個地方,首先他們正在檢查大小,然後是其他的東西,這樣對我來說並不合適。 我需要一些其他或更好的想法。什麼標準應該適用於程序找到重複的匹配
謝謝
我認爲這是您的想法來檢查擴展名和文件大小是一種很好。根據你需要,我可以提示你,我認爲會工作的東西是什麼:
1.檢查擴展:
當你想排除其中的一些。但是,如果你想嚴格檢查裏面的東西是行不通的。
簡單的例子:內0001位具有
My_file.pdf,以及具有內部0001位My_file.jpg,將被排除在外,但它們仍然是相同的。
2.檢查大小:
如果您將檢查擴展,檢查文件的大小是不具有包含兩個文件「.PDF」(0001)和第二屆(0100)很不錯的主意職高,你可以伊斯利看到他們不是平等的,但檢查大小將返回true,但當然,如果兩個文件不相等的大小,你可以擺脫他們,並說他們不是平等的。
3.檢查散列:從您的文件
製作亂碼,比較它們會給你的信息,如果他們是平等的,淡然的散列函數總是返回相同的哈希值相同的對象。
檢查更多:每字節https://en.wikipedia.org/wiki/Hash_function
4.檢查字節:
雖然它不是非常好主意,但假設你有2x4GB的文件,你的哈希函數可以工作很長,每個字節當然字節將工作更長的時間,但你可以已經得到這樣的情況:
File1.pdf(4GB)文件的Beggining:011010 ... 0 File2.pdf(4GB)111010 ... 0
正如你所看到的,首先檢查第一個字節會自動返回那些文件不等於,並且你將節省很多時間。
當然,你必須考慮,你需要什麼,你想如何比較你的文件,這些只是snipets,可以幫助你建立你的應用程序。
所有這些方法在Java中都很簡單,您不會在實現它們時遇到任何問題。
PS:Sry爲我的英語,這不是我的主要語言。
1 - 正如我看到java返回全名(我的意思是擴展名),所以你不會有問題「MyPic.jpg」與「MyPic.png」相等,因爲他們有不同的擴展名2 -i'm不確定我明白,2大小是否相等?我不知道你的意思在2評論,3 - 我會檢查我不知道什麼是散列,4 - 該計劃的ideea主要是爲MP3(我認爲)現在我也想要小文件文本和pdf和其他擴展常用(我認爲這是更難的照片) – LES
@LES 1.是的,你可以很容易地檢查在Java中的擴展,但你可以得到具有不同的擴展名和相同的數據裏面,尤其是當你做這些文件由你自己。 2.我剛纔說'file1的大小!= file2的大小',會起作用,但它們不可能相等,但'file1 == size2的大小'的信息一般不會告訴你。 3.你已經在Java中實現了散列函數(我不知道如何從對象類作品hashCode()我總是使用自定義散列函數,但我認爲它會做這項工作) – Thodgnir
但作爲程序員知道如何散列功能起作用,它們通常被使用。 4.你使用什麼擴展並不重要,用Java來檢查這樣的類,例如File,BufferedInputStream。但是如果你的程序使用小文件散列函數會好很多。 – Thodgnir
查看比較2個文件的MD5校驗和。 – McNultyyy
你是這個開發項目的「客戶」,所以你可以決定應該是什麼標準。首先,問自己在這種情況下「你」「想要」重複「是什麼意思。如果你不能告訴我們,那麼我們不能開始建議你。 –
感謝小夥子...仍然遇到一些問題,我在某處閱讀,如果equals()是真的,那麼散列碼也是真實的,但是另一種方式,si不一定是真的。 – LES