28 Kasım 2011 Pazartesi

JAVA DA DOSYA İŞLEME

Java da dosya işleme
Dosyalar
Giriş
Java dosya işleme babında içerisinde geniş sınıflar bulundurmaktadır. Temel sınıf File sınıfıdır. File sınıfı java.io paketinde bulunmaktadır. Dolayısıyla bu sınıfı kullanmak için bu paketi import etmemiz gerekir. Aşağıda ki örneğe bir bakalım;
import java.io.File;

public class Örnek {
    public static void main(String[] args)  throws Exception {
           
    }
}

File sınıfı FileOutputStream sınıfını baz alır. Bu sınıf ise OutputStream sınıfına dayanır.
Bir dosyayı kullanmak istiyorsak File sınıfının yapıcısını (constructor) oluşturmak gerekir. Yapıcılardan  biri  string tipinde bir , dosyanın adı veya dosyanın tam yolunu (path) argüman olarak alır. Tabi eğer dosyanın uzantısı varsa muhakkak onu da belirtmek gerekir. Aşağıda ki örneğe bir bakalım;
import java.io.File;
 
public class Örnek {
    public static void main(String[] args)  throws Exception {
            File dosya = new File("ornek.xpl");
    }
}

File sınıfının tek numarası bir dosya işlemi yapacağımızı planladığımızın belirtisi olmasıdır.

Dosya oluşturma
Eğer bir dosya oluşturma istiyorsak , dosyaya bir şeyler yazma ile mücehhez olan bir sınıf kullanmamız gerekir. Bunu yapmak için PrintWritter sınıfını kullanabiliriz. Bu sınıfta java.io paketinde tanımlıdır.
PrintWritter  sınıdı Writter sınıfını baz alır. Bu sınıf bir dosyaya yazma fonksiyonlarını barındırır.
Bu sınıfı kullanmadan önce class adına bir değişken tanımlarız. Bu sınıf bir çok yapıcıya (constructor) sahiptir. Yapıcılardan biri bir OutputStream nesnesini argüman alır. Yani bir File nesnesini PrintWritter yapıcısına geçiririz.  Aşağıda ki örnek de olduğu gibi;
import java.io.File;
import java.io.PrintWriter;

public class Aıştırma {
    public static void main(String[] args)  throws Exception {
            File ornekd = new File("ornek.xpl");
        PrintWriter pwgiris = new PrintWriter(dosyaornek);
    }
}


Dosyaya yazmak
PrintWritter nesnesi oluşturduktan sonra , istediklerimizi dosyaya yazabiliriz. Bu işi yapmak için PrintWritter  sınıfı print() ve println() metodlarını içerir.
import java.io.File;
import java.io.PrintWriter;

public class Ornek {
    public static void main(String[] args)  throws Exception {
            File ornekd = new File("ornek.xpl");
             PrintWriter pwgiris = new PrintWriter(dosya_ornek);

            pwgiris.println("Ankara");
            pwgiris.println("Erzurum");
            pwgiris.println(22.85);
            pwgiris.print(true);
    }
}


PrintWritter  sınıfının nesnesini kullanarak close() metodu ile dosyayı kapatabiliriz.
Dosyayı açmak için dosyanın adını File sınıfının yapıcısının içerisine yazmak yeterlidir.

Dosyadan okumak
Bir dosyadan veri okumak için , Scanner sınıfını kullanabiliriz. Bunu gerçekleştirmek için Scanner sınıfının yapıcısı File tipinde bir nesneyi argüman alır. Aşağıda ki örneğe bir göz atalım;
import java.io.File;
import java.util.Scanner;

public class Ornek {
    public static void main(String[] args)  throws Exception {
            File ornekd = new File("Ornek.xpl");
             Scanner tara = new Scanner(dosya_ornek);
    }
}

Dosyada ki veriler alt alta olan satırlarda saklanabilir. Dolayısıyla dosyadan satırları bir kere de while döngüsüyle okumamız gerekir. While  döngüsünün içerisinde Scanner nesnesini kullanırız argüman olarak. While ifadesinin içerisinde , Scanner nesnesi ile yaptığımız işlemde son satıra gelip gelinmediğine  bakarız. Bunu gerçekleştirmek için hasNext() metodundan yararlanırız. Bu metod bize true döndükçe Scanner nesnesi dosyanın sonuna gelmez ta ki false dönene kadar. Bu işlemi gerçekleştiren örnek bir kod aşağıda ki gibidir.
import java.io.File;
import java.util.Scanner;

public class Ornek {
    public static void main(String[] args)  throws Exception {
            File fleExample = new File("ornek.xpl");
        Scanner opnScanner = new Scanner(ornek_dosya);

                    while(nesne.hasNext()) {
                            System.out.println("Ad:    " +nesne.nextLine());
                            System.out.println("Soyad:     " +nesne.nextLine());
                            System.out.println("Saatlik maaş: " +nesne.nextLine());
                            System.out.println("Tam zamanlı mı?: " +nesne.nextLine());
            }
    }
}

Bu işlemlerden sonra dosyayı kapatmak için close()  metodunu kullanmayı unutmayalım.


Dosyayı silme
Dikkat! Dosyadan veri silme değil, dosyayı tamamen silmekten (ortadan kaldırmaktan )bahsediyorum. Bu işlem için delete() metodunu kullanırız.


Konuyla alakalı buradan örnek uygulamaları indirebilirsiniz . İyi çalışmalar...



13 Ağustos 2011 Cumartesi

DEITEL JAVA HOW TO PROGRAM

C ve C++ Deitel & Deitel kitabının ne kadar güzel olduğunu hepiniz biliyorsunuzdur.Deitel&Deitel ‘ın Java programlama dili içinde bir kitabı var.Kitapçılarda kolay kolay bulunmayan bir kitap olmakla beraber henüz bu kitabın Türkçeside yok.E- kitap formatınıda internetten bulmak zor olduğundan sizin için yüklemek istedim.Kitabın PDF formatını aşağıda ki linklerden herhangi  birinden  indirebilirsiniz.
İyi çalışmalar…



2 Ağustos 2011 Salı

LINUX'DA SİLİNEN DOSYALARI GERİ GETİRMEK




1-)İndirmemiz gereken sleuthkit ve foremost adında iki  paketimiz vardır.Ubuntu'da bu paketleri çekmek için terminale ;

sudo apt-get install sleuthkit
sudo apt-get install foremost

komutlarını yazmamız yeterli olacaktır.


2-)Öncelikle bilgisayarımızda ki disklerin yapısını incelememiz gerekiyor.Bunun için konsola df -h yazmamız gerek.Karşımıza şöyle bir yazı çıkacak.

mesut@mesut-laptop:~$ df -h
Dosyasistemi Boy Dolu Boş Kull% Bağlanılan yer
/dev/sda5 48G 5,7G 40G 13% /
none 1,5G 364K 1,5G 1% /dev
none 1,5G 812K 1,5G 1% /dev/shm
none 1,5G 104K 1,5G 1% /var/run
none 1,5G 0 1,5G 0% /var/lock
none 1,5G 0 1,5G 0% /lib/init/rw
/dev/sdb1 466G 119G 348G 26% /media/MESUT EMRE

Buradan da anlayacağımız üzere Linux sistemimiz dev/sda5 ' te kurulu.İlk olarak silinen dosyanın izlerinin diskteki konumunu belirleyelim. Bunun için debugfs isimli bir dosya sistemi hata ayıklayıcısı (debugger) kullanacağız. Ancak debugfs'i kullanabilmek için süper kullanıcı haklarını elde etmemiz gerekiyor:


debugfs /dev/sda5

komutunu veriyoruz.

3-)Şimdi yapmamız gereken silinen dosyanın bulunduğu dizine gitmek ve inode numarasını 
(silinen dosyalarla ilgili bilgileri ve diskteki blok grubunu saklar) tespit etmek.

debugfs 1.41.3 (12-Oct-2008)
debugfs:  cd /home/mesutemre/resimler
debugfs:  ls -d

Karşımıza şöyle bir şey çıktı.

252525  (12) .    333908  (4084) ..   <366591> (4052) resim.jpg

Hatırlarsanız silinen dosyamız /home/mesutemre/resimler adresindeidi.q tuşuna basarak debugfs'e 
geri dönelim. Burada yaptığımız bu dizine girerek ls -d komutunu vermek.Bu komut o dizindeki 
silinen verileri görüntülemeye yarar. Böylece silinmiş verinin inode numarasını tespit etmiş olduk. 
Şimdi yapmamız gereken bu verinin blok grubunu tespit etmek. Onun için


debugfs:  imap <numarası_inode_numarası>

Diyelim ki inode 252525 olsun.

Debugfs: imap<252525>

Inode 252525 is part of block group 45
        located at block 1474568, offset 0x0e00
Gördüğümüz gibi dosyamız 45 nolu blokta.

4-) Dosyamızı  geri getirmek için son bir bilgiye daha ihtiyacımız vardır. O da bir blok grubunda ki 
blok sayısı. Bunu bulmak için sats komutunu verdikten sonra q tuşuna basarak debugfs ' e geri 
dönelim.

debugfs: stats
        ***
        ***
Blocks per group:         125521
        ***
debugfs: q

5-)Sırada ki işlemimiz adresini tespit ettiğimiz blok grubunun içeriğini öğrenmek. İşte bunun için 
the sleuthkit ' i kullanacağız. Hatırlarsanız dosyamız 45 nolu grupta buluınuyor. Bu yüzden 45 nolu 
blokta ki bütün blokların içeriğini elde etmemiz gerekir. Bunun için 45. blokta ki ilk ve son blokların 
adresilerini öğrenmemiz yeterlidir. Gerisini sleuthkit bizim için hallediyor. İlk ve son bloğun adresini 
elde etmek için genelleştirilmiş bir formül vardır.

  b : blok sayısı (32768) => bir blokta 32768 tane blok var.

  n : grup no  (45)

Bu verilere göre ;  n x b   –    (n+1) x b -1     arasında blunuyor.

6-) Artık  45. bloğun içeriğini  diskten ayıklayabiliriz. Bunun için

root@ubuntu:~# dls /dev/sda6 1474560-1507327 > /media/disk-1/block.dat   komutunu vereceğiz. 
Birkaç saniye bekledikten sonra bu blok içeriği tamamen block.dat adında başka bir diske aktarılmış 
olduğnu göreceksiniz.

7-) Şimdi yapmamız gereken tek şey dosyayı bu bloğun içerisinden çekip almak. Bunun için foremost 
' u kullanacağız.

root@ubuntu:~# mkdir /media/disk-1/output
root@ubuntu:~# foremost -t jpg -i /media/disk-1/block.dat -o /media/disk-1/output/
bu komutu verdikten sonra ekrana
Processing: /media/disk-1/block.dat
benzeri bir çıktı gelecektir. Burada yaptığımız şey yeni bir klasör yaratıp (output) blok grubu içeriğindeki silinen dosyaları bu klasöre atmak. Gördüğümüz gibi foremost komutuna -t, -i ve –o gibi parametreler verdik. -t parametresi istediğimiz tipteki dosyların araştırılmasını sağlar. Bir jpg dosyası aradığımızdan -t yi jpg argümanı ile kullandık. -i parametresi içeriğini araştırmak istediğimiz veri dosyaları (block.dat) için kullanılan parametredir. -o parametresi ise silinen dosyaların geri geldikten sonra saklanacağı klasörü tanımlar, o yüzden de -o ile /media/disk-1/output argümanını kullandık.

8-)Hepsi bu kadar. Şimdi /media/disk-1/output klasörünü açalım. Eğer yaptığımız işler doğruysa burada bir jgp adlı klasör bulunmalıdır. Eğer -t parametresini kullanmasaydık foremost tüm dosya tiplerini araştıracak ve geri getirebildiği dosyaları, tip isimlerine sahip olan klasörlere atacaktı.jpg klasörünü açalım. Burada birden fazla dosya görebiliriz, bunun nedeni incelenen bloklarda birçok silinmiş dosya olması dolayısıyladır.

28 Haziran 2011 Salı

KALITIM (INHERITANCE)

En genel tanımıyla bir class dan yeni class lar türetmektir. Türetilen her class türediği class ın özelliklerini devralır. Peki neden bir class dan başka classlar türetiriz ki? Bunun cevabı son derece mükemmel. Tüm classlarda olan ortak özellikleri tek class da toplamak. Yani amaç ortak özellikleri tek bir çatı (class diyelim biz buna) altında toplamak.

ARABA
            TAKSİ
            -Fiat Albea
            -Volkswagen  Passat
            MİNİBÜS
            -Ford Transit
            -Hyundai  starex
            OTOBÜS
            -Mercedes Benz Travego
            -Man Fortuna

Dikkat edersek hepsi araba ve bir takım özellikleri aynı. Örneğin hepsinde gaz , fren , vites , teker vs. var. İşte biz bu ortak özellikleri olan nesnelere araba demişiz ve bu class ‘ ın adı da araba olmuş.
Gelelim kalıtım olayının Java classlarında nasıl uygulandığına  ;
Kalıtım classlarında türetmenin yapıldığı en üst class Temel sınıf (Base class) , türetilen classlara ise Türeyen class (derived class) denir. Aynı zamanda  kitaplarda şu isimleride görebilirsiniz. Base class a genelde Superclass  , derived calss a ise Subclass denir.
Türetme işi Java programlama dilinde extends anahtar sözcüğüyle yapılıyor. Şimdi bu anlattıklarımız üzere kodlarımızı yazalım.





public class Super {
    public static  void kimimben()
    {
        System.out.println("Ben super class ım ");
    }
}

Yukarıda temel class ımızı yazdık. Şimdi de bu classtan yeni bir class türetelim. Buraya dikkat ;

public  class tureyen  extends  Super {
    public static  void ben()
    {
        System.out.print("ben tureyen classım.Subclass");
    }
}
Tureyen classımızın adını yazdıktan sonra extend anahtar sözcüğünü kullanarak süper class yani ana classımızın adını yazdık. Bu ayrıntıya dikkat edelim.
Şimdi aklımıza şöyle bir soru takılailir. Acaba  subclass daki bir nesneyi kullanarak superclass daki bir nesneye erişmek mümkün mü? Evet mümkün. Kodları indirdiğiniz de bunun mümkün olduğunu derleyince görebilirsiniz.
Java dilinde Object  class ı tüm classların atasıdır. Bunu kdo yazarken bir nesneye erişmek için  . (nokta) koyduğunuz zaman görebilirsiniz.  Örneğin şöyle bir örnek verebiliriz. Kabul edelim ki Elips adında bir classımız olsun. Bu class Daire classından türetilmiş olmakla beraber Daire classı ise Grafik classından türetilmiştir.  Aşağıda ki resim bu olayı anlamak için yeterlidir.


super  tekniği

super()  tekniği sayesinde temel sınıfta tanımladığım ve ortak özellik olan şeyleri subclass da bir daha tanımlamama gerek kalmaz.
super () yapıcı metod içerisinde (constructor) mutlaka ilk satırda tanımlanmalıdır.
İndireceğiniz dosyada ki örneklerle super()  keywordunu iyi bir şekilde pekiştirebilirsiniz.
Java dilinde superclass üyelerinin  , subclass da yeniden bildirilmesine override denir. Yani superclass daki metod , subclass da geçersiz hale geliyor.


Şekilde ki okun aşağı inmesinin sebebi  erişim belirleyicileri arasındaki erişilebilirlik sınırlarının durumudur . Bu şekilde düşündüğümüzde  şunu söyleyebiliriz artık. Superclass da friendly erişim belirleyicisine sahip olan bir üye , subclass da ya protected ya da public olmalıdır.

Buraya tıklayarak konu ile alakalı kaynak kodları indirebilirsiniz.İyi çalışmalar...

23 Haziran 2011 Perşembe

KIRIK LİNKLER

Zamanla linklerde ki bazı dosyalar silindi.Ben de bu dosyaları sizi için tekrar upload ettim. Buraya  tıklayarak e-kitaplar haricinde ki dosyaları indirebilirsiniz.

Buraya  tıklayarak e-kitapları indirebilirsiniz.İyi çalışmalar...

JAVA DA STRINGLER



Javda’da String işleme için 4 tane işe yarar class ımız ve bu class ların içinde sık sık kullanacağımız metodlar bulunmaktadır.Şimdi sırayla bu class lardan bahsedelim.

String Class
Bu class’ın içerisinde bir çok metod bulunmak kaydıyla biz bu metodlardan sadece bir kaçını yani sık kullanılanları vereceğiz.Ayrıntılı bilgi için Introduction to JAVA PROGRAMMING (Y.DANIEL LIANG) kitabının 258.sahifesinden başlayarak275. Sahifesine kadar olan kısıma bakılabilir.
+charAt(index : int)  : stringde ki istediğimiz yerde ki karakteri verir bize.
+compareTo(anotherString : String) : Başka bir stringle istediğimiz stringi karşılatırır.
+concat(anotherString : String) : İki stringi birbirine bağlar.
+endsWith(suffix : String) : boolean (true ya da false) : Stringin istediğimiz harfle bitip       bitmediğini öğrenmeye yarar.Bitiyorsa true döner.
+equals(anotherString : String) : İki stringin eşit olup olmadığını incelemeye yarar.
+length() : String’in uzunluğunu döner.
+toCharArray() : Bir stringi karakter dizisine dönüştürür.
   +toLowerCase()  :  Stringdeki tüm büyük harfleri küçük harfe çevirir.

   +toUpperCase () : Stringdeki tüm küçük harfleri büyükharfe çevirir.


Character Class

Bu class da daha çok stringde ki karakterler üzerinde oynama yapabileceğimiz metodlar
karşımıza çıkmaktadır.


+compareTo(anotherCharacter : Character) : İki karakteri karşılaştırmaya yarar.ASCI sıralamasında hangisi daha büyükse onun için pozitif bir sayı döner.Eşitlik durumunda 0 döner.

+isDigit() : Karakterin sayı olup olmadığını inceler.Sayı ise true döner.

+isLetter() : Karakterin harf olup olmadığını inceler.Harf ise true döner.

+toLowerCase(ch:char) :  İstenilen karakteri küçük harfe çevirir.

+toUpperCase (ch : char) : İstenilen karakteri büyük harfe çevirir.



StringBuffer Class

Bu class String class ına bir alternatif classtır.



+append(Str : )  :  Stringin sonuna bir şeyler eklemek için kullanılır.

+delete ()  : Derleyicinin bize sunduğu imkanlar dahilinde stringin içinden bir substring ya da bir karakter silmek için kullanılır.

+insert() : Derleyicinin bize sunduğu imkanlar dahilinde stringe ekleme yapılabilir bu metod sayesinde.

+reverse() : Stringi ters çevirmek için kullanılır.



StringTokenizer Class

Başka bir işe yarar class ımız ise StringTokenizer classıdır.Örneğin bir cümlede ki kelimeler
üzerinde işlem yapacaksak bu class ın içinde ki metodu kullanmamız gerekir.

Class tanımlama olayı şu şekildedir :
     
      StringTokenizer emre= new StringTokenizer();

Bu class’ı yazmadan önce :

      İmport java.util.*;
     
Paketini yazmayı unutmayalım.

+countTokens()  : Bu metod bir cümlede ki kelime sayısını döner bize.

+hasMoreToken() : true ya da false döner.Eğer string boş değilse true boş ise false döner.

+nextToken() : hasMoreToken ile beraber kullanıldığında kelimeleri ayırmamızı sağlar.


 Konu ile alakalı kaynak kodları  buraya tıklayarak indirebilirsiniz.İyi çalışmalar...