txt dosyası olarak kaydetme yardım

Fireman_109
15-06-2010, 18:59   |  #1  
Fireman_109 avatarı
OP Üye
Teşekkür Sayısı: 0
93 mesaj
Kayıt Tarihi:Kayıt: Mar 2009

Örnek ben bir program yazdım hata vb birşey oluştuğunda bunu işte c de x.txt adlı içinde hatanın nedenlerini felan göstermek istiyorum 

ne yapabilirim bunun için hangi sınıfı kullanmalıyım bilen varsa yazarsa sevinirim

Fireman_109
28-06-2010, 21:20   |  #2  
Fireman_109 avatarı
OP Üye
Teşekkür Sayısı: 0
93 mesaj
Kayıt Tarihi:Kayıt: Mar 2009

Çözüm:
Diyelim ki bir dosyadaki belli yerleri, kelimeleri ya da karakter dizilerini başka bir kelime ya da karakter dizisiyle değiştirmemiz gerekiyor ve bunu bir Java programıyla yapacağız. O halde kabaca üç şey yapılacak demektir:

   1. Dosyadan okuma
   2. İçeriği değiştirme
   3. İçeriği dosyaya kaydetme

Şimdi bunun nasıl yapıldığından bahsedelim.

C# ve Java'da dosyadan okuma yapmak ve dosyaya yazmak için kullanılan paket IO paketi. Bu I ve O, Input ve Output yani "girdi" ve "çıktı" kelimelerinin baş harfleri. Öncelikle bu kütüphaneyi uygulamamıza import etmemiz gerekiyor.

import java.io.*;

Bu uygulama için kullanabileceğimiz BufferedReader ve BufferedWriter sınıfları var. Okunacak dosyanın yeri d:\yazi.txt olsun. Onu önce bir File dosyası olarak uygulamaya tanıtalım.

File dosya=new File("d:\\yazi.txt");

Not: "\" bir kaçış karakteri. Ama aslında string içinde bulunması gerektiği için bir başka "\" ile durumu belli ediyoruz. Dolayısıyla d:\\yazi.txt şeklinde iki "\" kullanıyoruz.

Ardından dosya okumak için BufferedReader'i tanımlıyoruz:

BufferedReader oku;

Okuma dosyasının yerinde olup olmaması gibi Exception'lar ortaya çıkabileceği için bu oku objesini bir try catch kalıbı içinde kullanacağız. İçine de bir FileReader göndermemiz gerekiyor. Bu FileReader da "dosya" diye tanımladığımız yazi.txt dosyasını içinde bulundurmalı;

try{
   oku=new BufferedReader(new FileReader(dosya));
}

Bu dosyanın içeriğini satır satır okuyacağız. Her okumada bir satır string geri dönürecek. Bu string'i hafızada tutmak için daha önceden bir string tanımlasak hoş olur:

String s = "";

Ardından yine try catch kalıbı içinde tanımladığımız oku'dan gelecekleri bu string'e taşıyacağız;

s = oku.readLine()

Tabii ki birden fazla satırı almamız gerektiği için her satırı s'ye eklemek daha uygun olacaktır. Bunun için while döngüsü kurup oku içinde "satırlar bitmediyse bir satır daha oku" şeklinde bir ayarlama yapmak gerekiyor;

while(oku.ready()){
   s+ = oku.readLine();
}

Fakat her satır bitiminde bir alt satıra geçildiğini gösteren bir ibare bulunmalı onun için de "\r\n"yi her satırın ardından eklememiz gerekiyor;

while(oku.ready()){
   s+ = oku.readLine() + "\r\n" ;
}

Artık tüm dosyanın içeriği s adını verdiğimiz String'in içinde yer alıyor. Şimdi bu s'nin içinde değiştirmek istediğimiz yerler var. Bunun için String sınıfının bir metodu olan replace()'i kullanıyoruz. replace()'e iki parametre göndereceğiz, ilki dosya içinde değiştirmek istediğimiz karakter dizisi, diğeri de bu değiştirilecek eski karakter dizisi yerine gelecek olan karakter dizisi. Diyelim ki benim dosyamın içinde "Ahmet" isimleri yanlış yazılmış, ve bunları "Mehmet" olarak değiştirmek istiyorum. O zaman kod şöyle olmalı;

s = s.replace("Ahmet","Mehmet");

Artık yeni içeriğim s'ye atılmış durumda. Sırada bunu bir dosyaya kaydetmek var. Bunun için de okumaya benzer olarak BuferedWriter sınıfını kullanacağız. Ama önce oku ile işim bittiği için bu objenin kullandığı dosyaların kullanıma açılması gerekiyor. Bunu da close() metoduyla yapıyorum;

oku.close();

Ardından BufferedWriter için benzer şekilde bir FileWriter oluşturmam gerekiyor. Eğer aynı dosyaya yazmak istiyorsam FileWriter'a yine "dosya" diye tanımladığım d:\yazi.txt'yi içeren File objesini gönderebilirim;

BufferedWriter yaz = new BufferedWriter(
   new FileWriter(dosya));

Ya da başka bir dosya da belirtebilirim;

BufferedWriter yaz = new BufferedWriter(
   new FileWriter("d:\\yenidosya.txt"))

Ardından write() metoduyla tüm s içeriğini yazdırabilrim;

yaz.write(s);

ve yine bağlantıyı kapatmam gerekiyor;

yaz.close();

Ardından try catch kalıbının try kısmıyla işim bitiyor. Catch içine de hatayı görebilmek için printStackTrace() metodunu yazıyorum;

}catch(Exception e){
   e.printStackTrace();
}

Aslında bunu iki farklı try catch içine almak daha uygun olurdu. Nerde ne hatası olduğu daha kolay görülebilir kılmak ve programın işlerliğini arttırabilmek için gerekli olan yerleri gerektiği kadar try catch içine almak sizin elinizde.

Son olarak kodu toparlar ve bir main metodu içinde göstermek gerekirse;

package org.hosaf.kod.ioornek;

import java.io.*;

public class OkuDegistirYaz {

   public static void main(String[] args) {
      BufferedReader oku;
      BufferedWriter yaz;
      File dosya=new File("d:\\yazi.txt");
      String s="";
      try{
         oku=new BufferedReader(new FileReader(dosya));
         while(oku.ready()){
            s+=oku.readLine()+"\r\n";
         }

          s=s.replace("Ahmet", "Mehmet");
          oku.close();

          yaz=new BufferedWriter(new FileWriter(dosya));
          yaz.write(s);
          yaz.close();
            
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}

Bu Java dosyamızı da OkuDegistirYaz adıyla kaydettiğimizde işlem tamam.

Not: Aynı işlemi farklı metodlarla yapmak da mümkün olabilir. Yani tek yok bu değildir.

Alıntıdır...