Hızlı Konu Açma

Hızlı Konu Açmak için tıklayınız.

Son Mesajlar

Konulardaki Son Mesajlar

Reklam

Forumda Reklam Vermek İçin Bize Ulaşın

Java Scanner ve Formatter Sınıfları ile Dosya İşlemleri

YaSa22

Fahri Üye
Fahri Üye
Katılım
12 Temmuz 2014
Mesajlar
2,293
Tepkime puanı
2
Puanları
0
Konum
GTA
Java I/O kütüphaneleri birçok farklı veri kaynağı ile işlem yapabilmek için geliştirilmiş bir yapıya sahiptir.Veri kaynağı, işletim sisteminde bulunan bir dosya (file) olabileceği gibi, ağ üzerinde bulunan uzak bir bilgisayar da olabilir. Java geliştiricileri için bu tür input (girdi) output (çıktı) işlemlerinin detayı esasen çok da önemli değildir. Herhangi bir veri kaynağını, Java’nın sunmuş olduğu I/O sınıfları ile ele alabilirsiniz.Bu yazıda, Java I/O kütüphanelerini kulanarak işletim sistemi üzerinde bulunan dosyalar ile nasıl veri giriş çıkışı yapılacağını anlatmaya çalışacağım. Bunun için kullanacağımız sınıflar java.util paketi içerisinde bulunan Scanner ve Formatter sınıfları.Scanner ve Formatter Sınıfları

Bilindiği gibi Scanner, bir veri kaynağından alınan verileri okumak için kullanılan oldukça gelişmiş bir Java sınıfıdır. Scanner, konsol üzerinden kullanıcıdan veri almanın yanında, herhangi bir dosya ile de çalışabilir. Sonuçta konsol ve dosya da birer veri kaynağıdır. Yapmamız gereken tek şey, Scanner nesnesini oluştururken dosya sistemi ile çalışacağımızı belirten uygun yapılandırıcıya (constructor) uygun nesneleri geçirmektir.Örneğin, Scanner ile konsol üzerinden veri okumak için, yapılandırıcıya varsayılan akış nesnesini geçirmek yeterlidir. System.in varsayılan olarak konsol üzerinden gelen veriyi okur.Kod:
Scanner input = new Scanner(System.in);



Aynı şekilde, bir dosya üzerinden veri okumak için, Scanner nesnesine bir dosya kaynağını temsil eden nesneyi geçirmek yeterlidir.Kod:
Scanner input = new Scanner(new BufferedReader(new FileReader("mail.txt")));



Burda dikkat etmemiz gereken tek şey, bir dosya akışını FileReader nesnesi ile ele alıyoruz.FileReader sınıfı, dosyadan karakter tabanlı akışları okumak için özelleştirilmiş bir sınıftır. FileReader nesnesine, işlem yapmak istediğimiz dosya adını string olarak geçirerek, dosya kaynağını FileReader nesnesi ile ilişkilendiriyoruz. Ancak FileReader nesnesi, veri okuma işini performanssız bir şekilde ele aldığından bu nesneyi daha performanslı olan BufferedReadernesnesine parametre olarak aktarmak çok daha yaygın bir kullanış şeklidir. Performans detaylarını bu yazıda ele almayacağımız için bu konuya daha fazla girmeyeceğim.Nihayetinde, BufferedReader nesnesini de Scanner nesnesine parametre olarak geçirerek, Scanner nesnesini bir dosya kaynağı ile kullanmaya başlayabiliriz.Formatter sınıfı da, Scanner gibi benzer işlevler için tasarlanmıştır. Uygulama içerisindeki biçimlendirilmiş bir veriyi herhangi bir veri kaynağına yazdırmak için Formatter sınıfı kullanılabilir. Yine Formatter nesnesini oluştururken, hedef kaynağı bir dosya ile ilişkilendiren Java nesnesini parametre olarak geçirerek, dosya yazma işlemini tamamlayabiliriz.Kod:
Formatter output = new Formatter(new BufferedWriter(new FileWriter("mail.txt")));



Artık bir dosya ile veri giriş çıkışını yapan uygulamamızı geliştirmeye başlayabiliriz.Uygulama Şablonu

Geliştireceğimiz uygulama, mail.txt adında bir dosyaya, kullanıcıdan alınan mail adreslerini yazan FileInput sınıfı ve mail.txt dosyasında bulunan verileri okuyup ekrana basan FileOutput adlı iki temel sınıfdan oluşmaktadır. Ayrıca bu sınıfları uygulamaya geçiren main methoduna sahip FileTest sınıfı ile dosya işlemlerini başlatan bir başka sınıfa daha sahiptir.Bu uygulama sayesinde Scanner sınıfı ile hem konsoldan hem de dosya üzerinden nasıl veri okunduğunu görebilirsiniz.Öncelikle FileOutput sınıfını geliştirelim.Kod:
/**
FileOutput.java
Kullanıcıdan alınan verileri sırası ile
mail.txt dosyasına yazar.
Veri alma işlemi end-of-file sinyali ile
son bulur. (Windows için Ctrl-Z)
*/


package org.javablog;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Formatter;
import java.util.Scanner;

public class FileOutput
{
private StringBuffer email;
private String fileName;
private Formatter output;

FileOutput()
{
fileName = "mail.txt";
output = null;
email = null;
}
FileOutput(String fileName)
{
this.fileName = fileName;
output = null;
email = null;
}

public void openFile()
{
try
{
output = new Formatter(
new BufferedWriter(
new FileWriter(fileName, true)));
}
catch (IOException e)
{
e.printStackTrace();
}
}

public void addRecord()
{
Scanner in = new Scanner(System.in);
email = new StringBuffer();
System.out.println("Please enter an emaill adress");
while(in.hasNext())
{
email.append(in.next());
output.format("%s%n", email);
email.delete(0, email.length());
}
}

public void closeFile()
{
if(output != null)
{
output.close();
}
}
}



Şimdide dosyaya yazılan verileri okuyup ekrana yazan FileInput sınıfımızı geliştirelim.Kod:
/**
FileInput.java
mail.txt adlı dosyadaki verileri okuyarak
ekrana basar.
*/

package org.javablog;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class FileInput
{
private String fileName;
private Scanner input;
private StringBuffer email;

FileInput()
{
fileName = "mail.txt";
input = null;
email = new StringBuffer();
}
FileInput(String inputFile)
{
fileName = inputFile;
input = null;
email = new StringBuffer();
}

public void openFile()
{
try
{
input = new Scanner(
new BufferedReader(
new FileReader(fileName)));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}

public void readFile()
{
while(input.hasNext())
{
email.append(input.nextLine());
System.out.println(email);
email.delete(0, email.length());
}

}
public void closeFile()
{
if(input != null)
{
input.close();
}
}
}



Artık bu iki sınıfımızı uygulamaya koyan main methoduna sahip FileTest sınıfımızı aşağıdaki gibi tanımlayabiliriz.Kod:
package org.javablog;

public class FileTest
{
public static void main(String[] args)
{
//Verileri dosyay yaz
FileOutput out = new FileOutput();
out.openFile();
out.addRecord();
out.closeFile();

//Dosyadaki verileri oku
FileInput in = new FileInput();
in.openFile();
in.readFile();
in.closeFile();
}
}



Görüldüğü gibi Java ile dosya işlemlerini ele almak oldukça basit. Scanner ve Formatter gibi sınıflara geçirilen herhangi bir veri kaynağı ile, uygulama içerisinde doğrudan çalışabiliyoruz. Veri kaynağının detaylarını bilmesek de, Scanner ve Formatter sınıflarının sunmuş olduğu methodları kullanarak, farklı veri kaynaklarına verilerimizi yazıp okuyabiliyoruz.
 

Users Who Are Viewing This Konu (Users: 0, Guests: 1)

Üst