Dosya Parçalayıcı (File Splitter)


İki-üç gündür uğraştığım projeyi sonunda tamamladım. Hatalar-Buglar olabilir ama test ettiğim kadarıyla bir sorun yok. Bu gerçekleştirdiğim programda dosyaları belirtilen boyutta farklı parçalara ayırıp uzantısı 000,001,002,... gibi olan dosyaları birleştirme işlemi yapılıyor. Kodun geliştirilmesinde katkısı dilin menu üzerinden değiştirilmesine ve Java IO yerine Java Native IO kullanılması oldu. (Çalıştırılabilir JAR)

İlk başta standart IO komutlarıyla aşağıdaki şekilde parçaya dosya kopyalamayı yaparken daha hızlı çalıştığı söylenen nio (Native IO) konusuyla karşılaştım. İyi dedim, ben de bu yöntemi kullanayım o zaman. Biraz uğraştan sonra parçalara ayırmayı ve parçaları birleştirmeyi başarıyla tamamladım.

Normal IO ile kopyalama:

 // Kaynak dosyayi hedef dosyaya kopyalar
// Eger hedef dosya yoksa yaratir
void copy(File kaynak, File hedef) throws IOException {
    InputStream in = new FileInputStream(kaynak);
    OutputStream out = new FileOutputStream(hedef);

    // in'den out'a transfer bytelarini tutacak olan veri yapisi
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}

Native IO ile kopyalama:
 try {
    // Kaynak uzerinde bir kanal aciyoruz
    FileChannel srcChannel = new FileInputStream("kaynakDosyaIsmi").getChannel();

    // Hedef uzerinde bir kanal aciyoruz
    FileChannel dstChannel = new FileOutputStream("hedefDosyaIsmi").getChannel();

    // Kaynaktan boyutu kadar byte'i hedefe yaziyoruz
    dstChannel.transferFrom(srcChannel, 0, srcChannel.size());

    // Kanallari kapatalim
    srcChannel.close();
    dstChannel.close();
} catch (IOException e) {
}

Gördüğünüz gibi dosya kopyalamada döngülerle değişkenlerle fazla uğraşmadan ve daha hızlı bir şekilde gerçekleştirim yapabiliyorsunuz. İşi ilerletmişler. Böylece her ortamın kendi hızlı dosya kopyalama işlemi çağrılıyor.

Projenin kodunu inceleyip daha ayrıntılı bilgi alabilirsiniz.

1 yorum:

T. E. Kalaycı dedi ki...

JDK 7 ile birlikte gelen dosya giriş/çıkış (File IO) yeniliklerini anlatan bir yazı için : http://blogs.sun.com/alanb/entry/copy_that