Lorsqu'il y a beaucoup de fichiers en double dans un répertoire, n'en laissez qu'un et supprimez les doublons.
La comparaison de l'ensemble du fichier est difficile car le coût de traitement est élevé.
Par conséquent, cette fois, nous avons décidé de comparer les hachages (résumés) des fichiers et de les implémenter avec la politique suivante.
Set
to
Set` s'il n'existe pasL'exemple qui fonctionne pour le moment est le suivant.
import java.io.File
import java.security.MessageDigest
val sha256 : MessageDigest = MessageDigest.getInstance("SHA-256")
fun getDigest(bytes: ByteArray): List<Byte> = sha256.digest(bytes).asList()
fun getFiles(pathToDir: String): List<File> = File(pathToDir).listFiles()?.asList() ?: emptyList()
fun main() {
val files = getFiles(/*Chemin du répertoire à traiter*/)
val set = HashSet<List<Byte>>()
var count = 0
files.forEach {
val digest = getDigest(it.readBytes())
if (!set.add(digest)) {
if (it.delete()) {
println("Deleted:\t${it.name}")
count++
} else {
println("Fail delete:\t${it.name}")
}
}
}
println("\n\n$count deleted.")
}
<détails> J'ai utilisé Cette fois, j'ai spécifié Probablement le plus simple et le moins cher à utiliser
Recommended Posts
Deleted: 43_3 exemplaires.gif
Deleted: 46_Copie de 3 2.gif
Deleted: 70_Copie de 1 2.gif
Deleted: 94_1 exemplaire.gif
Deleted: 50_Copie de 3 2.gif
Deleted: 66_1 exemplaire.gif
Deleted: 95_1 exemplaire.jpg
Deleted: 58_3 exemplaires.gif
Deleted: 63_1 exemplaire.gif
Deleted: 32_1 exemplaire.jpg
Deleted: 55_3 exemplaires.gif
Deleted: 62_3 exemplaires.gif
Deleted: 49_3 exemplaires.gif
Deleted: 9_Copie de 1 2.gif
Deleted: 47_3 exemplaires.gif
Deleted: 96_1 exemplaire.jpg
Deleted: 71_1 exemplaire.gif
Deleted: 52_Copie de 3 2.gif
Deleted: 64_Copie de 1 2.gif
Deleted: 61_3 exemplaires.gif
Deleted: 56_3 exemplaires.gif
Deleted: 60_Copie de 3 2.gif
Deleted: 31_1 exemplaire.jpg
Deleted: 57_Copie de 3 2.gif
Deleted: 98_Copie de 1 2.jpg
Deleted: 34_1 exemplaire.jpg
Deleted: 68_1 exemplaire.gif
Deleted: 53_3 exemplaires.gif
Deleted: 42_3 exemplaires.gif
Deleted: 74_Copie de 1 2.gif
Deleted: 30_1 exemplaire.gif
Deleted: 36_Copie de 1 2.gif
Deleted: 65_1 exemplaire.gif
Deleted: 100_1 exemplaire.jpg
Deleted: 37_1 exemplaire.gif
Deleted: 35_Copie de 1 2.gif
Deleted: 45_3 exemplaires.gif
Deleted: 99_1 exemplaire.jpg
Deleted: 87_Copie de 1 2.jpg
Deleted: 33_1 exemplaire.jpg
Deleted: 73_1 exemplaire.gif
Deleted: 1_7 exemplaires.jpg
Deleted: 48_3 exemplaires.gif
Deleted: 54_Copie de 3 2.gif
Deleted: 51_3 exemplaires.gif
Deleted: 67_1 exemplaire.gif
Deleted: 93_Copie de 1 2.gif
Deleted: 44_Copie de 3 2.gif
Deleted: 72_Copie de 1 2.gif
Deleted: 97_Copie de 1 2.jpg
50 deleted.
Commentaire
Comment prendre un hash
java.security.MessageDigest
.
Cela peut être utilisé comme standard Java
sans introduire de bibliothèques.SHA-256
pour le texte, mais si vous dites" Je veux éviter la duplication à la limite! ", Je pense que vous devriez spécifier SHA-512
.Gestion des doublons
HashSet
.
De plus, dans ByteArray
, il y a des soucis autour de ʻequals, donc ici il est converti en
List` et géré.