Paylaşım , Takip İçin
Giriş/Çıkış (I/O)İşlemleri Nedir?
- Bir dosyadan veri okumak yada bir dosyaya veri yazmak için Giriş/Çıkış (I/O) işlemleri kullanılır.
- Giriş/Çıkış işlemleri için import java.io.* paketini programa eklemeniz gerekmektedir.
- Java’da giriş çıkış işlemleri Stream mantığı ile yapılır. Stream program ile dosya arasında bir köprü görevi görür.
- Java’da dosyalama işlemleri karakter bazlı yada byte bazlı olarak ikiye ayrılır.
- Bunun sebebi Java’nın sağlamış olduğu Unicode desteğidir.
Karakter Tabanlı Giriş /Çıkış İşlemleri
- Dosya okuma işlemleri
- InputStreamReader
- BufferedReader
- FileReader
- FilterReader
- StringReader
Dosya yazma işlemleri
OutputStreamWriter
BufferedWriter
FileWriter
StringWriter
PrintWriter
Unicode desteği vardır.
Eğer read yada write kelimesi varsa o sınıf karakter tabanlı işlem yapar.
Byte Tabanlı Giriş /Çıkış İşlemleri
- Dosya okuma işlemleri
- BufferedInputStream
- DataInputStream
- FilterInputStream
- PrintStream
- RandomAccessFile
- FileInputStream
Dosya yazma işlemleri
BufferedOutputStream
DataOutputStream
FileOutputStream
FilterOutputStream
Unicode desteği yoktur.
Stream ile bitiyorsa byte tabanlı işlem yapar.
File Sınıfı Kullanımı
- File sınıfı bilgisayardaki dosya ve dosya üzerinde işlem yapmak için kullanılır.
- File sınıfı kullanılırken bu sınıfın Yapılandırıcısına dosyanın uzantısı (path) verilir. (dizin yolu)
- File Sınıfı bazı metotlar:
- createNewFile()
- delete()
- getName()
- getAbsolutePath()
- exists()
- renameTo()
- mkdir()
- canRead(), canWrite()
Örnek
import java.io.*;
public class FileExamples {
public static void main(String[] args) {
File dosya=new File("C:\\workspace\\deneme.txt");
try {
dosya.createNewFile();//Yeni dosya oluşturmak
System.out.println("Dosya Oluşturuldu");
}
catch (IOException e) {
e.printStackTrace();
}
System.out.println(dosya.getName());
System.out.println(dosya.getPath());
System.out.println(dosya.getAbsolutePath());
}
}
-------------------------------
Dosya Oluşturuldu
deneme.txt
C:\workspace\deneme.txt
C:\workspace\deneme.txt
Örnek
import java.io.*;
public class FileExamples {
public static void main(String[] args) {
File dosya=new File("C:\\workspace\\deneme.txt");
try {
dosya.createNewFile();//Yeni dosya oluşturmak
}
catch (IOException e) {
e.printStackTrace();
}
File path=new File("C:\\workspace\\yeni");
path.mkdir();//Yeni klasör açmak
//Dosynın adını ve yolu değiştirmek
File yeni=new File("C:\\workspace\\Kopya.txt");
dosya.renameTo(yeni);
if(yeni.canRead()==true && yeni.canWrite()==true)
System.out.println("Dosya okunabilir ve yazılabilir");
}
}
FileReader ve FileWriter ile I/O İşlemleri
- FileReader File sınıfından oluşturduğunuz nesneleri karakter bazlı okumak için kullanılan bir sınıftır.
- Karakter bazlı işlem yaptığı için okunan veriler char tipinde bir diziye aktarılmalıdır.
- FileWriter sınıfı da karakter bazlı işlem yapmaktadır.
- Dosyaya yazma ve ekleme yapma gibiişlemleri yerine getirmek için kullanılırlar.
- Buffer kullanmadığı için küçük dosya okuma işlemlerinde daha uygundur.
Örnek
import java.io.*;
public class FileCopy {
public static void main(String[] args) {
File dosya=new File("C:\\Workspace\\Kitap.txt");
char[] data=new char[(int)dosya.length()];
try {
FileReader fr=new FileReader(dosya);
fr.read(data);//Dosyadan okunan veri char dizisine aktarılıyor
}
catch (IOException e) {
e.printStackTrace();
System.err.println("Dosya okunamadı");//Hata oluştuğunda uyarı mesajı döner
}
String okunan=new String(data);//Char dizisinin Stringe çevrilmesi
System.out.println(okunan);
for(int i=0;i<data.length;i++)
System.out.print(data[i]);
}
}
Dosya Kopyalama
import java.io.*;
public class FinallyExp {
public static void main(String[] args) {
File dosya=new File("C:\\workspace\\kitap.txt");
File dosya2=new File("C:\\workspace\\kitapkopya.txt");
char data[]=new char[(int) dosya.length()];
try(FileWriter yaz=new FileWriter(dosya2,true)) {
FileReader reader=new FileReader(dosya);
reader.read(data);
yaz.write(data); //Dizi Dosyaya yazılıyor
}
catch (IOException e) {
e.printStackTrace();//Hata yığınını ekrana basar
}
}
}
FileWriter(dosya2,true) nesnesi iki parametre alır.
İkinci parametre true ise dosyanın sonuna ekleme yapacaktır.
Aksi halde dosyanın içindeki bilgileri siler.
BufferedReader ve BufferedWriter Sınıfları
- Reader sınıfından türetilen BufferedReader ve Writer sınıfından türetilen BufferedWriter sınıfları karakter bazlı çalışırlar.
- Dosyadan okuma işlemleri için buffer kullanılır ve performansı FileReader ve FileWriter sınıfına göre daha iyidir.
- Kullanımı için:
import java.io.*;
- Satırını kodunuza eklemeniz gerekmektedir.
Örnek-1
import java.io.*;
import java.util.Scanner;
public class BufferedReaderExp {
public static void main(String[] args) {
File dosya =new File("C:\\Workspace\\Kitap.txt");
try {//Veri okuma
FileReader fr=new FileReader(dosya);
BufferedReader br=new BufferedReader(fr);
String satir;
while((satir=br.readLine())!=null){
System.out.println(satir);
}
br.close();
}
catch (Exception e) {
System.err.println(e.toString());
}
Örnek-2
Scanner s=new Scanner(System.in);
System.out.println("Bir ifade giriniz.");
String line=s.nextLine();
File dosya2=new File("C:\\Workspace\\KitapYeni.txt");
try {
FileWriter fw=new FileWriter(dosya2);
BufferedWriter bw=new BufferedWriter(fw);
bw.write(line.toUpperCase()); //Girilen satırı Büyük harfe dönüştürme
//Bufferda bulunan verilerin dosyaya yazılmasını sağlar.
bw.flush();
bw.close(); //BufferedWriter nesnesi kapatılıyor
System.out.println("Dosya yazıldı");
}catch (IOException e) {
e.printStackTrace();
}
}
}
FileInputStream ve FileOutputStream Sınıfları
- FileReader ve FileWriter sınıflarının aksine char bazlı işlem yapmazlar.
- Byte bazlı dosya okuma ve yazma işlemleri için kullanılır.
- Okuma işlemi için byte bazlı bir dizi atılır ve dosya içeriği bu diziye aktarılır.
- Kullanımı için:
import java.io.*;
- Satırını kodunuza eklemeniz gerekmektedir.
Örnek-1
import java.io.*;
public class Stream {
public static void main(String[] args) {
File dosya =new File("C:\\Workspace\\Kitap.txt");
byte[] dizi=new byte[(int)dosya.length()];
try {//Veri okuma
FileInputStream fs=new FileInputStream(dosya);
fs.read(dizi);
String data=new String(dizi);
System.out.println(data);
fs.close();
}
catch (Exception e) {
e.printStackTrace();
}
Örnek-2
File kopya =new File("C:\\Workspace\\Kitapyedek.txt");
try {//Veri yazma
FileOutputStream fw=new FileOutputStream(kopya);
fw.write(dizi);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedInputStream ve BufferedOutputStream ile I/O İşlemleri
- BufferedInputStream verileri Buffer üzerinden byte tabanlı olarak okuma yapmaktadır.
- Karakter tabanlı yöntemden daha hızlı çalışır fakat Unicode desteği yoktur.
- BufferedOutputStream ise FileOutputStream sınıfından türetilmiştir.
- Verinin yazılması işleminde bir byte dizisine ihtiyaç duyulmaz ama String ifade sayısal (byte) olarak kodlanmalıdır.
Örnek-1
import java.io.*;
public class BufferedStreamExp {
public static void main(String[] args) {
File dosya=new File("C:\\Workspace\\Kitap.txt");
byte[] dizi=new byte[(int)dosya.length()];
try {
FileInputStream fs=new FileInputStream(dosya);
BufferedInputStream bs=new BufferedInputStream(fs);
int okunan=0;
while ((okunan=bs.read(dizi))!=-1) {
String data=new String (dizi,0,okunan);
System.out.print(data);
}
bs.close();
}
catch (IOException e) {
e.printStackTrace();
}
Örnek-2
String text="Bu bir bufferedStream Örneğidir.";
File f=new File("C:\\Workspace\\buffered.txt");
try {
FileOutputStream fs=new FileOutputStream(f,true);
BufferedOutputStream bs=new BufferedOutputStream(fs);
bs.write(text.getBytes());
//Bufferda bulunan verilerin dosyaya yazılmasını sağlar.
bs.flush();
bs.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Paylaşım , Takip İçin