Bu Sayfayı Paylaş:

Bilgi/Açıklama

Stream

Bir program dışarıdaki herhangi bir kaynakla veri alış verişinde bulunabilir. Dış kaynak bir disk, bir CD-ROM veya network'teki herhangi bir kaynak olabilir. Bir program dış kaynak ile her zaman verileri byte olarak gönderir ve byte olarak okur.
Java'da girdi-çıktı (input/output) işlemleri için stream (akım) açılır. Açılan bu stream'den veri alış verişi yapılır. Stream ile işlem bittiği zaman stream kapatılır. Veri almak için InputStream (Girdi Akımı), veri göndermek için ise OutputStream (Çıktı Akımı) sınıfı kullanılır. Aşağıdaki örnekte bir dosyadaki bilgiler okunmaktadır.
import java.io.*;
public class FileInputTest {
  public static void main(String[] args) {
    try{
      String path="D:\\TestFile.txt";
      FileInputStream fis
          =new  FileInputStream(path);
      //Dosyadaki tüm bilgi byte byte okunuyor. 
	 int c;
      while((c=fis.read())!=-1){
        System.out.print((char)c);
      }
      fis.close();
    }catch(FileNotFoundException e){
      e.printStackTrace();
     }catch(IOException e){
       e.printStackTrace();
     }
  }
}
Örnekte path (yol) okumak istediğimiz dosyanın adresidir. FileInputStream (Dosya Girdi Akımı) dosyadan veri okumak için kullanılan bir sınıfdır. FileInputStream parametre olarak path almaktadır. read() (oku) yöntemi bir int değeri okur. Ancak bu int bir char'a karşılık gelir. Eğer int değeri -1 ise dosyanın sonu geldiği anlaşılır. FileInputStream kurucusu FileNotFoundException (Dosya Bulunamadı İstisnası), read() yöntemi ise IOException (Girdi Çıktı İstisnası) fırlatır.
Dosyanın içeriği aşağıdaki gibi çıktıda görülebilir :
Hello Java !
Bu bir dosya okuma testidir
Aşağıdaki örnekte ise bir String'i bir dosyaya yazıyoruz.
import java.io.*;
public class FileOutputTest {
  public static void main(String[] args){
    String string="Hello Java";
    try{
      String path="D:\\TestFile.txt";
      FileOutputStream fos
          =new FileOutputStream(path);
      // Tüm string char char dosyaya yazılıyor.	
      for(int i=0;i<string.length();i++){
        char c=string.charAt(i);                
        fos.write(c);
      }
      fos.close();
      System.out.println(
          "string dosyaya yazıldı");
    }catch(FileNotFoundException e){
      e.printStackTrace();
    }catch(IOException e){
      e.printStackTrace();
    }
  }
}
İlk örneğin tersi yapılmaktadır. FileOutputStream bir dosyaya yazmak için kullanılır. String FileOutputStream'e döngü açıp karakter karakter yazılmaktadır.
Bu tür stream'lerde genellikle tampon (buffer) kullanılır. Bilgiler önce tampona koyulur ve tampon dolduktan sonra gerçekten okuma veya yazma işlemi yapılır. Böylece işlemler hem daha güvenilir hem de daha hızlı olmaktadır.
Text dosyalarıyla çalışırken genellikle satır satır okur veya satır satır yazarız. Bu işlem için FileInputStream yerine FileReader (Dosya Okuyucu) , FileOutputStream yerine FileWriter (Dosya Yazıcı) kullanılabilir. Örnek:
import java.io.*;
public class ReaderTest {
  public static void main(String[] args){
    try{
      String path="D:\\TestFile.txt"; 			
      FileReader fr=new FileReader(path);
 
      // Tamponlama için  
      // BufferedReader kullanılacak.
      BufferedReader br=new BufferedReader(fr);
      // Tüm okuma satır satır yapılıyor     
      String line="";		
      while((line=br.readLine())!=null){
         System.out.println(line);
      }
      br.close();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
} 
FileReader dosyadan okuma yapmak için kullanılır. BufferedReader (Tanponlu Okuyucu) ise okuma işlemini tamponlayarak yapmaktadır. Bu nedenle BufferedReader'dan satır satır okuma yapılabilmektedir. Eğer readLine() (dize oku) yöntemi null döndürürse dosyanın bittiği anlaşılmaktadır. Uygulama dosya içeriğini ekrana basar :
Hello Java !
Bu bir dosya okuma testidir
Aşağıdaki örnekte bir yazıyı bir dosyaya yazıyoruz.
import java.io.*;
public class WriterTest {
  public static void main(String[] args){
    try{
      String path="D:\\ TestFile.txt";
      FileWriter writer=new FileWriter(path);
      BufferedWriter bw
          =new BufferedWriter(writer);
      String text="Bu bir deneme yazısıdır";
      bw.write(text);
      bw.close();
      writer.close();
      System.out.println("Yazı dosyaya yazıldı");
    }catch(Exception e){
      e.printStackTrace();
 }
 }
}

Bilgi/Açıklama

File Sınıfı

Java'daki File (Dosya) sınıfı sabit diskte bir klasörü veya veri taşıyan bir dosyayı temsil etmek için kullanılır. Dosya hakkında bilgilere bu sınıf ile erişilebilir. Dosyanın adı, yolu , boyutu, klasör mü değil mi, klasör ise içindeki dosyalarının veya klasörlerinin listesi gibi bilgilere ulaşabilirsiniz.
import java.io.*;
public class FileTest {
  public static void main(String[] args){
    String path="D:\JavaBook\Java.doc";
    File file=new File(path);
    // Dosyanın bilgileri ekrana bastırılıyor.
    System.out.println(file.getPath());
    System.out.println(file.getName());        
    System.out.println(file.length());                
    System.out.println(file.getParent());
    System.out.println(file.exists());
    System.out.println(file.lastModified());
    System.out.println(file.isHidden());
  }
}
Yukarıdaki uygulamanın çıktısı aşağıdaki gibidir.
 
D:\JavaBook\Java.doc
Java.doc
915456
D:\JavaBook
true
1117109060638
false
Yukarıda örnekte bir File nesnesi yaratıp o file'ın çeşitli bilgilerini ekranda bastırıyoruz. Aşağıda ise bir klasörün içindeki dosyaların path'lerini ekrana bastırıyoruz.
import java.io.*;
// Bir klasör içindeki dosyaları listeleyen örnek
public class DirectoryTest {
  public static void main(String[] args){
    File dir=new File("D:\\Download\\Java");
    File[] list=dir.listFiles();        
    for(int i=0;i<list.length;i++){
      File file=list[i];
      System.out.println(file.getPath());
    }
  }
}
Programın çıktısı aşağıdadır.
D:\Download\Java\eclipse-SDK-3.0.1-win32.zip
D:\Download\Java\j2eesdk-1_4_01-samples.zip
D:\Download\Java\j2eesdk-1_4_01-windows.exe
D:\Download\Java\j2me_wireless_toolkit-2_2-windows.exe
D:\Download\Java\jb2005_enttrialdl_win_mac
D:\Download\Java\jb2005_enttrialdl_win_mac.zip
D:\Download\Java\jsf.pdf
D:\Download\Java\jwsdp-1_6-windows-i586.exe
D:\Download\Java\ka.zip
D:\Download\Java\NetBeans
D:\Download\Java\semc_j2me_sdk_2_2_0_rc.zip
Bir dosya içeriği başka bir dosyaya kopyalayalım.
import java.io.*; 
public class CopyUtil{ 
  public static void main(String args[]){ 
    try {
       CopyUtil util = new CopyUtil();
       util.copy(
          new File(args[0]),
          new File(args[1])); 
     }catch (Exception e) {
		e.printStackTrace();
	} 
  } 
  public void copy(File in, File out) 
    throws Exception 
  { 
    FileInputStream fis  
        = new FileInputStream(giris); 
    FileOutputStream fos 
        = new FileOutputStream(cikis);
    byte[] buf = new byte[1024];
    int i = 0; 
    while((i=fis.read(buf))!=-1) {
      fos.write(buf, 0, i); 
    }
    fis.close();
    fos.close();
 } 
} 

FileInputStream'den alınan veri, FileOutputStream'e verilmiştir.



Bu Sayfayı Paylaş:

İletişim/Bize Yazın   mh@fibiler.com   Google+   Facebook   Twitter   fibiler@googlegroups.com
Her Hakkı Saklıdır
Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir.
Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir