AMP Analytics -->

Teknoloji Rehberi

1 Mayıs 2025 Perşembe

Kotlin'de Tekrarlanan Dosyaları Bulup Silme Programı

 

Kotlin'de Tekrarlanan Dosyaları Bulup Silme Programı


Aşağıda, Kotlin kullanarak tekrarlanan dosyaları bulup silen bir program örneği bulunmaktadır. Bu program, belirtilen dizindeki tüm dosyaları kontrol eder, aynı içeriğe sahip olanları tespit eder ve kullanıcı onayıyla siler.

kotlin
Copy
Download
import java.io.File
import java.security.MessageDigest
import java.util.*

fun main() {
    val scanner = Scanner(System.`in`)
    
    println("Tekrarlanan dosyaları bulup silme programına hoş geldiniz!")
    print("Taranacak dizin yolunu girin: ")
    val directoryPath = scanner.nextLine()
    
    val directory = File(directoryPath)
    
    if (!directory.exists() || !directory.isDirectory) {
        println("Geçersiz dizin yolu!")
        return
    }
    
    val files = directory.listFiles()?.filter { it.isFile } ?: emptyList()
    
    if (files.isEmpty()) {
        println("Dizinde hiç dosya bulunamadı.")
        return
    }
    
    println("${files.size} dosya taranıyor...")
    
    // Dosyaları hash değerlerine göre grupla
    val fileGroups = mutableMapOf<String, MutableList<File>>()
    
    files.forEach { file ->
        val fileHash = calculateFileHash(file)
        fileGroups.getOrPut(fileHash) { mutableListOf() }.add(file)
    }
    
    // Tekrarlanan dosyaları bul
    val duplicateFiles = fileGroups.values.filter { it.size > 1 }
    
    if (duplicateFiles.isEmpty()) {
        println("Tekrarlanan dosya bulunamadı.")
        return
    }
    
    println("\nBulunan tekrarlanan dosya grupları:")
    duplicateFiles.forEachIndexed { index, group ->
        println("\nGrup ${index + 1}:")
        group.forEach { file ->
            println(" - ${file.name} (${file.length()} bytes, son değiştirilme: ${Date(file.lastModified())})")
        }
    }
    
    print("\nTekrarlanan dosyaları silmek istiyor musunuz? (E/H): ")
    val response = scanner.nextLine().trim().uppercase()
    
    if (response == "E") {
        deleteDuplicateFiles(duplicateFiles)
        println("İşlem tamamlandı.")
    } else {
        println("İşlem iptal edildi.")
    }
}

fun calculateFileHash(file: File): String {
    val digest = MessageDigest.getInstance("SHA-256")
    file.inputStream().use { input ->
        val buffer = ByteArray(8192)
        var bytesRead: Int
        while (input.read(buffer).also { bytesRead = it } != -1) {
            digest.update(buffer, 0, bytesRead)
        }
    }
    return digest.digest().joinToString("") { "%02x".format(it) }
}

fun deleteDuplicateFiles(duplicateGroups: List<List<File>>) {
    var totalDeleted = 0
    
    duplicateGroups.forEach { group ->
        // İlk dosyayı orijinal olarak koru, diğerlerini sil
        val (originals, duplicates) = group.partition { it == group.first() }
        
        duplicates.forEach { duplicate ->
            if (duplicate.delete()) {
                println("Silindi: ${duplicate.absolutePath}")
                totalDeleted++
            } else {
                println("Silinemedi: ${duplicate.absolutePath}")
            }
        }
    }
    
    println("\nToplam $totalDeleted dosya silindi.")
}

Programın Çalışma Mantığı

  1. Kullanıcı Girdisi: Program, kullanıcıdan taranacak dizin yolunu ister.

  2. Dizin Kontrolü: Girilen yolun geçerli bir dizin olup olmadığını kontrol eder.

  3. Dosya Listeleme: Dizindeki tüm dosyaları listeler.

  4. Hash Hesaplama: Her dosyanın SHA-256 hash değerini hesaplar (içerik kontrolü için).

  5. Gruplama: Aynı hash değerine sahip dosyaları gruplar.

  6. Raporlama: Tekrarlanan dosya gruplarını kullanıcıya gösterir.

  7. Onay ve Silme: Kullanıcı onayı alarak her gruptaki orijinal dosyayı korurken diğerlerini siler.

Kullanım Örneği

Copy
Download
Tekrarlanan dosyaları bulup silme programına hoş geldiniz!
Taranacak dizin yolunu girin: C:\Users\Kullanici\Downloads
42 dosya taranıyor...

Bulunan tekrarlanan dosya grupları:

Grup 1:
 - resim1.jpg (1024 bytes, son değiştirilme: Wed May 01 10:15:23 TRT 2024)
 - resim_kopya.jpg (1024 bytes, son değiştirilme: Wed May 01 10:20:45 TRT 2024)

Grup 2:
 - dokuman.pdf (2048 bytes, son değiştirilme: Tue Apr 30 09:10:15 TRT 2024)
 - dokuman(1).pdf (2048 bytes, son değiştirilme: Tue Apr 30 09:12:30 TRT 2024)

Tekrarlanan dosyaları silmek istiyor musunuz? (E/H): E
Silindi: C:\Users\Kullanici\Downloads\resim_kopya.jpg
Silindi: C:\Users\Kullanici\Downloads\dokuman(1).pdf

Toplam 2 dosya silindi.

Geliştirme Önerileri

  1. Güvenlik: Silme işleminden önce yedek alma seçeneği ekleyebilirsiniz.

  2. Performans: Büyük dosyalar için hash hesaplama süresini optimize edebilirsiniz.

  3. Arayüz: Grafiksel kullanıcı arayüzü ekleyebilirsiniz.

  4. Filtreleme: Belirli uzantılı dosyaları filtreleme seçeneği ekleyebilirsiniz.

Hiç yorum yok:

Yorum Gönder

Popular Posts