Son Yazılar

Java Dosya İşlemleri(Dosya Oluşturma, Dosya Silme, Dosyadan Veri Okuma, Dosyaya Veri Yazma)

Merhaba arkadaşlar. Bugün dersimizde dosya işlemlerinden bahsedeceğiz.

Bu derste öğreneceklerimiz:

  • Dosya Oluşturma
  • Dosya Silme
  • Dosyadan Veri Okuma
  • Dosyaya Veri Yazma
  • Scanner sınıfı ile okuma

Öncelikle Dosya Oluşturma işlemini görelim. Bunun için aşağıdaki komutları yazıyoruz. Ne anlama geldiğini de komutların yanlarına yazdım.

	public static void DosyaOlustur(String URL){
		File f = new File(URL); //  yol belirtmeyip sadece dosya ismi belirttiğimiz zaman otomatik olarak bulunduğu klasöre göre işlem yapar.
					// yani burada benim bilgisayara göre ; C:\Users\Buyukaptan\workspace\DosyaIslemleri konumuna göre işlem yapar.(Yol belirtmezsek)
		try {
			if(!f.exists()){ // eğer dosya yoksa
				f.createNewFile(); // dosyamızı oluşturur.
				System.out.println(f.getName()+ " adlı dosya Oluşturuldu..");
			}else{
				System.out.println("Dosya olduğundan oluşturma işlemi yapılmayacaktır. ");
			}
		} catch (IOException e) { // hata yakalama
			// TODO: handle exception
			e.printStackTrace();
		}
	}

Üstteki fonksiyonu main metot da aşağıdaki şekilde çağırdığımızda;

package com.dosya.main;
import com.dosya.islemler.DosyaIslemleri;

public class MainPage {
	public static void main(String[] args) {
		DosyaIslemleri.DosyaOlustur("deneme.txt"); // URL vermeden çağırdığımız da
	}
}

file2

Dosya Okuma

Gördüğünüz üzere projenin çalıştığı konumda dosyamızı oluşturdu. Eğer yol verseydik verdiğimiz yere dosya oluşturacaktı.

Şimdi dosya silme işlemi için aşağıdaki metodu yazalım.

	public static void DosyaSil(String URL){
		File f = new File(URL); // yol belirtmeyip sadece dosya ismi belirttiğimiz zaman otomatik olarak bulunduğu klasöre göre işlem yapar.

		if(!f.exists()){ // eğer dosya yoksa
			System.out.println("Dosya bulunamadığından silinemedi");
		}else{
			f.delete(); // eğer dosyamız varsa.. // silme işlemi gerçekleştirir.
			System.out.println(f.getName() +" adlı dosya başarılı bir şekilde silinmiştir.");
		}
	}

Main metotda aşağıdaki gibi çağırdığımız zaman;

package com.dosya.main;
import com.dosya.islemler.DosyaIslemleri;

public class MainPage {
	public static void main(String[] args) {
		DosyaIslemleri.DosyaSil("deneme.txt");
	}
}

Konsolda aşağıdaki sonucu görürüz.
file3

Şimdi dosya okuma işlemimizi yapalım. Bunun için aşağıdaki komutları yazmadan önce. deneme.txt adlı dosyamıza aşağıdaki metini ekledim.
file4

Ve aşağıdaki komutları yazıp main metot da çağırıyorum.

	public static void DosyaOku(String URL){
		File file = new File(URL);

		try {
			FileInputStream fis = new FileInputStream(file); // dosya okumak için çağırıyoruz
			int dosyaBoyutu = (int) file.length(); // txt uzantılı dosyalar da her karakter 1 byte yer kaplar
												   // bu yüzden uzunluğu alarak metnin uzunluğunu da bulmuş oluyoruz
			System.out.println("Dosya uzunluğu : "+ dosyaBoyutu); // ekrana dosya uzunluğunu yazdırıyoruz.
			for (int i = 0; i < dosyaBoyutu; i++) { // dosyamızın her karakterini okuyoruz.
				System.out.print((char)fis.read()); // ekrana yazdırıyoruz.
			}
			fis.close(); // dosya okuma işlemimiz bittikten sonra kapatıyoruz.
		} catch (FileNotFoundException e) {
			// TODO: handle exception
			System.out.println("Dosya Bulunamadı..");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

main methot

package com.dosya.main;
import com.dosya.islemler.DosyaIslemleri;

public class MainPage {
	public static void main(String[] args) {
		DosyaIslemleri.DosyaOku("deneme.txt");
	}
}

Sonuç :
file5

Türkçe ı harfini okumada gördüğünüz gibi sıkıntı yaşadık.

Şimdi dosyaya veri yazma metodumuzu görelim.

	public static void DosyaYazma(String URL){
		File file = new File(URL); // hangi dosya üzerinde işlem yapacağımızı seçiyoruz.
			try {
				// Dosyaya yazmak için nesnemizi oluşturuyoruz.
				FileOutputStream fos = new FileOutputStream(file);
				// Ekleyeceğimiz yazıyı yazıyoruz.
				String yazi = "Bu benim ekleyeceğim ilk yazıdır. \nBuda aşağı satıra yazılacak";
				//Yazma işlemini gerçekleştiriyoruz.
				fos.write(yazi.getBytes());
				fos.flush();
				// İşlemimiz bitince kaynaklarımızı kapatıyoruz. Boşuna sistemde hazır beklemesinler.
				fos.close();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

Main metodumuz :

public class MainPage {
	public static void main(String[] args) {
		DosyaIslemleri.DosyaYazma("deneme.txt");
	}
}

Sonuç :
file6

Gördüğünüz gibi satır atlatmamış olarak gözüküyor. Fakat dosyayı okurken sanki satır atlamış gibi okuyor. Şimdi bu örneğimizi yapalım.
Bildiğiniz gibi scanner sınıfını klavyeden birşeyler girerken kullanabiliyoruz. Fakat dosya işlemlerinde, string okuma işlemlerinde de rahatlıkla kullanabiliriz. Şimdi Dosyadan veri okuma işlemine alternatif olan fonksiyonumuzu görelim.

	public static void DosyaOkumaWithScanner(String dosyaUrl){
		File file = new File(dosyaUrl);
		try {

			Scanner scanner = new Scanner(file);
//			while(scanner.hasNext()){ // kelime kelime okur. boşluklar silinir.
//				System.out.print(scanner.next());
//			}

			while(scanner.hasNextLine()){
				System.out.println(scanner.nextLine()); // satır satır okur
			}

			scanner.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Dosya Bulunamadı..");
		}

	}

Şimdi main metodumuzu yazalım ver çalıştıralım.

package com.dosya.main;
import com.dosya.islemler.DosyaIslemleri;

public class MainPage {
	public static void main(String[] args) {
		DosyaIslemleri.DosyaOkumaWithScanner("deneme.txt");
	}
}

Sonuç :
file7

Gördüğünüz gibi satır atlatma işlemimizi uyguladı.

Bu dersimizi indirmek istiyorsanız.(Kaynak Dosyalar)
[wpdm_file id=9]

Hakkında Ali Demirci

1991 Ankara doğumluyum. Bilgisayar Mühendisliği bölümü 2013 mezunuyum. Bakanlığın bir kurumunda, Sistem(Linux, Windows Server) üzerine çalışmaktayım. Fakat boş zamanlarımda, kendimi yazılım konusunda da geliştirmekteyim. 20'ye yakın Android programım vardır. Her türlü soru(n)larınızda iletişime geçmekten çekinmeyin.

Bir bak istersen...

C# Lambda Expressions kullanımı

Merhaba, Bu yazımda Lambda Expressions hakkında biraz bilgi vermeye çalışacağım. Lambda Expressions genelde basit işlermler yapmak için …

20 yorumlar

  1. Çok güzel bilgiler. Teşekkür ederim yardımlarınız için:)

  2. Teşekürler İşime çok yaradı

  3. Abi bende bilgisayar mühendisliği okuyorum 1.sınıfım şuan, okulda java görüyorum, ilerisi için ne yapmalıyım neye yoğunlaşmalıyım bi tavsiyen var mı?

  4. hocam proje klasörüne atılan dosyalar projeyi derlediğimizde dist klasörünün altına gitmiyor. projede kullanacağımız txt,ini dosyalarını nereye koymalıyız diğer ide lerde exe-nin konumuna göre yapılıyor javada nasıl oluyor.
    teşekkürler.
    not:bir kaç konuda ders istegim var kabul edersniz?

  5. merhabalar
    benim mevcut bir .txt dosyam var ve java programım ile sürekli bu txt dosyasında istediğim satırlarda değişiklik yapmak istiyorum. örneğin txt dosyası şu şekilde olsun
    su 0,50 tl
    ekmek 1,00 tl
    yağ 6,00 tl
    ve ekmeğin fiyatını değiştirmek istiyorum 1,25 yapmak istiyorum geri kalan tüm metinler yerinde kalacak şekilde. yardımcı olursanız sevinirim

    • bu biraz sıkıntılı. Metin içi arama yaparak yapabilirsiniz. Öncelikle metin içindeki yazıları String yazı diye bir değişkene kopyalayın. Öyle bir fonksiyon yazın ki, bu dediğiniz işlem yapılabilsin. Bunun da algoritmasını düşünmek lazım. Bana mail yoluyla ulaşırsanız, yardımcı olabilirim.

      • öncelikle ilgi için teşekkür ederim
        mail adresinizi bulamadım. benim algoritma ile ilgili sıkıntım yok onu hallediyorum for ile satır satır okuyup diziye aktarıyorum dizide ekmek fiyatını 1,25 yapıyorum fakat bunu txt dosyasında güncelleyemiyorum. önce excelde kaydediyordum verileri fakat hem boyut arttı hemde excel program donduğunda bozuluyordu veriler gidiyordu. ama kullanımı kolaydı tek sütünda ilerliyordum yine ve fiyat değişikliği yaparken önce ekmeğin bulunduğu satırı tespit edip daha sonra
        örnek veriyorum yaz(0,i,”ekmek 1,25 tl” ) şeklinde yazdırıyordum ve i. ni satırdaki eski veriyi silip üstüne yenisini yazdırıyordu bana gerekli olan tam olarak bu

        • aslında bi yolu var bütün metni diziye aktarıp sonra değişikliği dizide halledip bütün olarak texte aktarırsam sorunum çözülür ama benim text dosyası 13bin satırdan oluşuyor gereksiz yere programı yavaşlatmış olurum. bana örnek bir kod olarak sadece yukarıda verdiğim text dosyasını çözerseniz sevinirim. algoritma geliştirmenize gerek yok sadece 2. satırı silip yerine başka bir metin yazın gerisini ben hallederim :)) fakat 1. ve 3. satırları kullanmadan yani sadece 2. satırı değiştirmenin bi yolu lazım bana 🙂

      • iyi günler bir ödevim var sıkıntı yaşıyorum yardımcı olurmusunuz

    • Sadece fiyatları farklı bir değişkende tutarsan degistirmek istedigin alanı bulmana gerek kalmaz ornegin
      ekmek fiyatını string ef=”1,25″; olarak tutsan sonra istedigin zaman
      ef=”2″; şeklinde yeni deger girersen istedigin zaman update yapabilirsin.

  6. Merhaba,
    Bir sorum olacak, Java’da yazdığım bir programda ,içinde mevcut bilgiler olan bir text dosyasında istediğim satırı güncellemek istiyorum nasıl yapabilirim? Yardımcı olursanız sevinirim.

  7. Emeğine sağlık kardeşim çok güzel bir anlatım , çok teşekkürler.

  8. kayıtlar.txt bir metin dosyası oluşturarak 1 den 100 e kadar sayılar ı döngü oluşturarak yazan program ? yardımcı olursanız sevinirim 🙂

    • Valla hocam, hazıra konmak olur yazarsam. Size balık tutmayı öğretsem bence daha iyi olur. File sınıfını kullanarak metin dosyası oluşturabilirsiniz. İnternette örneği var. Bu sitede de var. For döngüsü ile kolayca yazdırabilirsiniz.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir