Sponsor Reklam 


27.11.2008 (03:17)

 Dosyadan Karakter Okumak 
Java'da dosya işlemlerinde File sınıfı ve akışlar (streams) kullanılır.

Diskin C bölümünde yer alan kodcu.txt'den karakter karakter okuma yapalım.

Dosya: C://kodcu.txt
deneme 1
deneme 2
deneme3
satır 1
satır 2
satır3

Şu kod ile okuma yapalım:
package kodcu.net;

import java.io.*;

public class Main {

  public static void main(String[] args) {

    try {
      File file = new File("C://kodcu.txt");
      FileInputStream fis = new FileInputStream(file);
      int c;
      // dosya sonuna kadar yani -1'e kadar yazdiralim
      while ((c = fis.read()) != -1) {
        System.out.print((char)c);
      }
      fis.close();
    }
    catch (FileNotFoundException fnfe) { }
    catch (IOException ioe) { }
  }

}

Elde ettiğimiz çıktı:
deneme 1
deneme 2
deneme3
sat?r 1
sat?r 2
sat?r3

Görüldüğü gibi Türkçe karakterlerde sorun çıktı. Türkçe karakterler yerine soru işareti (? - question mark) geldi. Sıkça karşılaşılabilen bu problemi önlemek için kodu şu şekilde değiştirelim:

package kodcu.net;

import java.io.*;

public class Main {

  public static void main(String[] args) {

    try {
      File file = new File("C://kodcu.txt");
      FileInputStream fis = new FileInputStream(file);
      InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-9");
      int c;
      // dosya sonuna kadar yani -1'e kadar yazdiralim
      while ((c = isr.read()) != -1) {
        System.out.print((char)c);
      }
      isr.close();
      fis.close();
    }
    catch (FileNotFoundException fnfe) { }
    catch (IOException ioe) { }
  }

}

Yeni çıktımız şu şekilde:
deneme 1
deneme 2
deneme3
satır 1
satır 2
satır3

Java'da dosyadan karakter okuma işlemi için read() fonksiyonunu ve Türkçe karakter kodlaması (character encoding) için ISO-8859-9'u kullandık. read() fonksiyonunun dönüş tipinin int (integer) olduğuna ve karakter olarak kullanabilmemiz için char (character) ile cast yapıldığına dikkat ediniz. Dosya sonuna gelindiği ise -1 değerinin okunması ile anlaşılmaktadır.

Dosya giriş akışı (file input stream) oluştururken belirtilen dosya yolunda (file path) dosyanın yer almamasına karşılık FileNotFoundException istisnası yakalanmalıdır. Ayrıca read() adımında da okumaya yönelik bir istisna için de IOException istisnası yakalanmalıdır.
Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter