- İkilik Veri Akımları (Byte Streams) : İkili tipteki dosyaları okuyup yazmakta kullanılırlar
- Karakter Akımları(Char Streams): Metin belgeleri okuyup yazmakta kullanılırlar
- Nesne Akımları(Object streams): Serializable olan Java nesnelerini okuyup yazmakta kullanılırlar
Bu sınıfların dışında akım sınıflarının özelliklerini değiştiren sarmalayıcı akım sınıfları da mevcuttur. Örneğin BufferedReader sınıfı herhangi bir Reader sınıfını sarmalayarak tamponlama özelliği katar.
İlk olarak karakter akımlarını incelemeye çalışalım. Yazılım geliştirme sürecince çokça karşımıza çıkan metin dosyalarını Java’da okumak için Reader soyut sınıfından türeyen InputStreamReader alt sınıfı olan FileReader sınıfı kullanılır. Dosyaya yazmak için ise API’de bu sınıfın muadili FileWriter sınıfı mevcuttur. Örnek olarak herhangi bir metin dosyasının satır başlarına satır numarasını ekleyen şu kod satırlarını inceleyelim:
FileWriter fw = null;
try {
int lineNumber = 1;
FileReader fr = new FileReader(fileName);
fw = new FileWriter("linenumber.txt");
int c = fr.read();
do {
if ((char) c == '\n') {
lineNumber++;
fw.write(c);
fw.write( Integer.toString(lineNumber));
}
else
{
fw.write(c);
}
c = fr.read();
} while (c != -1);
} catch (IOException ex) {
Logger.getLogger(FileIOUI.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
fw.close();
} catch (IOException ex) {
Logger.getLogger(FileIOUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
Metin dosyamızı okumak için FileReader sınıfını kullandık. Öncelikle okumak istediğimiz dosya adını kullanarak bir FileReader nesnesi oluşturup, bu nesne üzerinde read() metodunu çağırdık. Bu sınıfın dosyadan okumak için birden fazla metodu bulunmakla beraber burada dosyayı karakter-karakter okumamızı sağlayan int dönüş değerine sahip olan read() metodunu kullandık. Bu metodun dışarıya verdiği int tipindeki değişken aslında char tipinde bir değişken olduğundan tür dönüşüm operatörünü uygulamamızda bir sakınca yoktur yani :
int c = fr.read();
if ((char) c == '\n') {
}
kullanımı doğrudur. Burada son olarak dikkat etmemiz gereken husus read() metodunun dosya sonuna geldiğinde değer olarak -1 döndürmesidir. Yani dosya sonuna gelip gelmediğimizi dönüş değerinin -1 olup olmadığını kontrol ederek anlayabiliriz.
Metin dosyası yazmak için ise FileWriter sınıfını kullandık. Yine bu sınıfta da dosyaya yazmak için birden fazla metod bulmak mümkün. Biz burada yine karakter-karakter yazmamıza olanak sağlayan write(int) metodunu kullandık. Sadece satır başlarına yazdırmak isediğimiz satır sayısını String tipine dönüştürüp write(String) metodunu kullanarak dosyaya yazdık. Bu iki farklı kullanımı gösterirsek :
int c = fr.read();
if ((char) c == '\n')
{
lineNumber++;
fw.write(c);
fw.write( Integer.toString(lineNumber));
}
Eğer dosyaya en baştan değil sonuna ekleme yapmak istiyorsak FileWriter sınıfının :
public FileWriter(File file, boolean append)
yapıcı metodunu kullanabiliriz. Burada ikinci parametreye true değerini vererek dosyaya ekleme yapmak istediğimizi bildirmeliyiz.
Metin dosyalarını işlerken genellikle karakter-karakter okuma/yazma yerine kelime-kelime okuma/yazma yada satır okuma/yazma işlemlerini kullanırız. FileReader ve FileWriter sınıfları bu yeteneklere sahip değildir dolayısıyla bunun için sarmalayıcı sınıflar mevcuttur. Bu sınıfları ve yeteneklerini bir sonraki derste anlatacağım.
İlgili Yazılar:
- Java Dersleri 11 – XML Okuma – Yazma İşlemleri Bu dersimizde Java’nın XML işlemleri için kullanılan sınıflarının genel özelliklerini...
- NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı...
- Java Dersleri 3 – Kontrol Yapıları Bu dersimizde Java’nın kodun akışına yön veren kontrol ifadelerinin...
- Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
- Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını...


(2 oy verilmiş, ortalama: 8,50) <-- Oy Vermeden Geçme
Selamlar, Öncelikle emeğiniz için teşekkürler, şunu sormak istiyorum Dosya okuma işleminde EXCEL gibi bir dosyayı kullandığımızda, Excel dosyası içerisinde bulunan türkçe karakterleri okumak mümkün olmuyor hepsi ? olarak çıkıyor. Bu konuda bir öneriniz olabilirmi?
Doğan bey merhabalar. Excel dosyalarının encodingini bilmiyorum ancak DataInputStream sınıfının read metoduyla dis.read(album, 0, 30); şeklinde okuduğunuz herhangi bir Stringin encodingini new String(album,”iso-8859-9″) String yapılandırma metoduyla değiştirebilirsiniz. Yine de Excel okumak için yazılan JExcel gibi kütüphaneleri kullanmanızı öneririm kolay gelsin.
Merhabalar paylaşım için teşekkür ederim.Ancak benim aradığım konu biraz daha farklı.C programlama dilinde kullanılan konumlandırma fonksiyonu fseek javada yok,ama fseek fonksiyonunun görevini yapan başka bir kullanım şekli olmalı diye düşünüyorum.Bir türlü bulamadım,javada fseek kullanımına benzer bir kullanım varmı? Varsa nasıl kullanılır ?
(fseek fonksiyonu özetle şu işi yapıyor;
Dosya okuma esnasında program dışarıdan girilen bir değeri alarak o sayıdan sonraki byteları okuyor,örneğin 100 byte lık veriyi atlıyor ve 101.byte tan itibaren okumaya başlıyor.Burada zamandan birkazanım söz konusu çünkü ilk 100 byte lık veriyi okumuyor)
Şimdiden çok teşekkürler…
İkilik (binary) dosyaları okumaya yarayan DataInputStream sınıfının skipBytes() metodu işinizi görecektir.