24 Mayıs 2011 Salı

Java'da dosya okuma, yazma ve JFileChooser ile JOptionPane kullanımı

Bu yazımda Java'da dosya işlemlerinin nasıl yapılacağını anlatmaya çalışacağım. Bunu yaparken de dosya seçiminde, JFileChooser sınıfı kullanılacak. Bir hata alındığında ise hata mesajlarını göstermek için JOptionPane sınıfından yararlanılacak.

Program yazarken zaman zaman dosya işlemlerini kullanılır. Bazen birden fazla dosyadan okuma, birden fazla dosyaya yazma yapmamız gerekebilir ve burada kullandığımız dosyalar farklı farklı dizinlerde bulunabilir ya da kullanılacak dosyaların yerleri tam olarak bilinmiyor olabilir. Bu gibi durumlar için C# programlama dilinde “OpenFileDilog” sınıfı kullanılarak, dosyalar seçilebiliyor. Java'da da bu benzer bir şekilde yapılabiliyor. Burada ise “JFileChooser” sınıfı kullanılıyor.


İlk olarak, aşağıdaki gibi basit bir arayüz tasarlayalım:

Bu arayüzde kullanılan nesneler aşağıdaki gibidir:
  • jTextField1: En üstteki jTextField nesnesi. Dosya seçiminden sonra dosyanın bulunduğu yer, burada gösterilecek
  • jTextField2: Değiştirilecek kelimenin girileceği yer
  • jTextField3: Değiştirilecek kelimenin yerine yazılacak kelimenin girileceği yer
  • jButton1: (“Aç”) Bu butona tıklanınca JFileChooser nesnesi açılacak ve bu nesne sayesinde dosya seçilecek
  • jButton2: (“OKU”) Bu butona tıklanınca “Aç” butonunda seçilmiş olan dosya okunacak.
  • JButton3: (“YAZ”) Bu butona tıklanınca “Aç” butonunda seçilmiş olan dosya üzerine yazma işlemi yapılacak
  • jButton4: (“Değiştir”) Bu butona tıklandığında dosya içerisinde veri değişimi yapılacak
  • jButton5: (“SİL”) Bu butona tıklandığında herşey silinecek
  • jTextArea1: Dosya okunduğunda okunan verinin yazılacağı kısım. Ayrıca burada değişiklik yapılabilecek ve bu değişiklik “YAZ” butonu yardımıyla dosyaya yazdırılabilecek

Nesneler kısaca tanıtıldıktan sonra kod kısmında neler yaptığımızı anlatmaya başlayalım.

Kod kısmında aşağıdaki global değişkenler kullanılmıştır:
File f=null;
String path=null;
JOptionPane x=new JOptionPane();
Dosya Açma

Dosya seçme işlemlerini yapacak olan “Aç” butonu ile başlayalım. Öncelikli olarak bu butona “mouseClicked” event'i ekleyelim. Bu event'in içine aşağıdaki kodları yazalım:
JFileChooser fileChooser=new JFileChooser();
fileChooser.showOpenDialog(fileChooser);
f=fileChooser.getSelectedFile();
path=f.getAbsolutePath();
jTextField1.setText(path);
Yukarıda ilk satırdaki “fileChooser” adında bir JFileChooser nesnesi oluşturuluyor. İkinci satırda ise oluşturulan bu nesnenin kullanıcı tarafından görüntülenmesi sağlanıyor. Kullanıcı, açılan dosya seçim penceresinden dosya seçtiğinde, seçilen bu dosya daha önce oluşturulmuş olan f nesnesine atanıyor. Sonraki satırda “path” isimli değişkene bu doyanın bulunduğu dizinin yolu atanıyor ve bu veri jTextField1'e yazılıyor.

Böylelikle dosyamızı seçmiş olduk ve dosyanın bulunduğu dizini de artık biliyoruz. Gerektiğinde bunlar kullanılabilecektir.


Dosya Okuma

Şimdi de dosya okuma işleminin nasıl yapıldığını anlatmaya çalışalım. Bunun için üzerinde “OKU” yazan butonu kullanacağız. Yine bu butona da bir “mouseClicked” event'i ekleyelim. Bu event'in içine aşağıdaki kodları yazalım:

try {
BufferedReader reader = new BufferedReader(new FileReader(f));
String line=null;
while (reader.ready()) {
    line=reader.readLine();
    jTextArea1.append(line+"\n");
}
reader.close();
} catch (Exception ex) {
x.showMessageDialog(mainPanel, "HATA: "+ex);
}
Yukarıdaki kod try – catch blokları arasına yazılmıştır. Böylelikle exceptionları yakalamak daha kolay olacaktır. Try bloğunun içindeki ilk satırda okuma yapmayı sağlayacak “reader” adında BufferedReader nesnesi oluşturuluyor. Onun altındaki satırda ise okumanın yapılacağı “line” isimli String nesnesi oluşturuluyor. Okuma işlemi bir while döngüsü içerisinde, satır satır yapılacak. “reader” nesnesi hazır olduğu müddetçe, yani “reader.ready()” komutu true sonucunu verdiği müddetçe, okuma yapılacak. While döngüsü içinde ise, yine “reader” yardımı ile dosyadaki, sıradaki satır okunacak, jTextArea1 nesnesi içine yazılacak. Buradaki yazma işlemi, jTextField1'deki verilerin her satır yazdıkça silinmemesi için “append” ile yapılmıştır. Çünkü bu komut olanları değiştirmeden, en sona yazma işlemi yapmaktadır. En sonda ise “reader” nesnesi kapatılıyor.

Catch bloğu içinde bir JOptionPane nesnesi olan “x” yardımıyla, olası bir exception'ın görüntülenmesi sağlanmaktadır. Çeşitli mesajların, hata mesajlarının görüntülenmesi için C# programlama dilinde “MessageBox” kullanılıyor. Burada JOptionPane sınıfının da aynı görevi gördüğü söylenebilir.

 
Dosyaya Yazma

Java'da dosyaya yazma işlemi de, okumaya benzer bir şekilde yapılmakta. Burada farklı olarak BufferedReader yerine BufferedWriter kullanılıyor. Bizim programımızda yazma işlemini gerçekleştirecek olan, üzerinde “YAZ” yazılı butona “mouseClicked” event'i ekleyelim ve içine aşağıdaki kodları yazalım:

try {
BufferedWriter writer = new BufferedWriter(new FileWriter(f));
String data = jTextArea1.getText();
writer.write(data);
writer.close();
} catch (Exception ex) {
x.showMessageDialog(mainPanel, "HATA: "+ex);
}
Burada da kodlarımız yine try-catch blokları arasında. Try bloğu içindeki ilk satırda, BufferedWriter sınıfından “writer” isminde bir nesne oluşturuluyor. Bunun altındaki satırda, “data” isimli bir String nesnesine, jTextArea1'de yazılı veriler atanıyor. String tipindeki bu veri, sonraki satırda “writer” nesnesi yardımıyla daha önce oluşturulmuş olan “f” dosyasına yazılıyor ve writer kapatılıyor.
Catch bloğu içerisinde de, yine daha önce de bahsettiğim gibi JOptionPane nesnesinin kullanımı görülüyor.

Arayüzdeki, üzerinde “SİL” yazılı buton, jTextArea1'deki yazılı herşeyin silinmesini sağlamaktadır.

Veri Değiştirme

Burada; üstteki JTextField alanına girilen kelimenin, eğer jTextArea1 nesnesi içerisinde yer alıyorsa, altındaki JTextField alanına girilen kelime ile değiştirilmesi sağlanmaya çalışılacak.
Bu; direkt olarak dosya işlemleri ile alakası olmasa da, zaman zaman kullanılabilecek bir işlem. Bu işlem ile bir dosyadaki, belirli bir kelimenin, kelime parçasının, başka bir kelime veya kelime parçası ile değiştirlimesi sağlanabilir. Bunu gerçekleştirmek için üzerinde “Değiştir” yazılı butona mouseClicked event'i ekliyoruz. İçine de aşağıdaki kodları yazmamız yeterli olacaktır:


String text = jTextArea1.getText();
text=text.replaceAll(jTextField2.getText(), jTextField3.getText());
jTextArea1.setText(text);
Burada ilk satırda, jTextArea1 nesnesindeki tüm veri “text” isimli bir String nesnesine aktarılıyor. Sonraki satırda, String sınıfının “replace” isimli metodundan faydalanarak gerekli değiştirmeler yapılıyor. Daha sonra, “text” nesnesi, tekrardan jTextArea1 nesnesinin içine yazılmaktadır. Bir dosyadaki veri alınsa, yukarıdaki işlemden sonra bu veri, dosya üzerine tekrardan yazılırsa, dosyadaki veri değişmiş olur.


_____________________________________________________________________________ 
Not: Buradaki kodlar Netbeans IDE 6.9.1 kullanılarak yazılmıştır.

Kodları buradan indirebilirsiniz. 

Hiç yorum yok :

Yorum Gönder