### Java Dosya Okuma ve Yazma İşlemleri
Java'da dosya okuma ve yazma işlemleri, `java.io` ve `java.nio` paketleri kullanılarak gerçekleştirilebilir. Bu ders notlarında, `BufferedReader`, `PrintWriter`, ve Serialization (Serileştirme) ile Deserialization (Deserileştirme) işlemlerini ele alacağız.
#### BufferedReader Kullanımı
`BufferedReader` sınıfı, metin dosyalarını okumanın etkili bir yolunu sağlar. Aşağıda bir dosyanın satır satır nasıl okunacağını gösteren bir örnek bulunmaktadır:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
- **BufferedReader:** Dosya okumak için kullanılan sınıf.
- **FileReader:** Bir dosyayı okumak için kullanılan sınıf.
- **readLine():** Dosyadan bir satır okur. Satır yoksa `null` döner.
#### PrintWriter Kullanımı
`PrintWriter` sınıfı, metin dosyalarına yazı yazmanın etkili bir yolunu sağlar.
```java
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Main {
public static void main(String[] args) {
try (PrintWriter pw = new PrintWriter(new FileWriter("output.txt"))) {
pw.println("Hello, World!");
pw.println("Java File Writing Example.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
- **PrintWriter:** Dosya yazmak için kullanılan sınıf.
- **FileWriter:** Bir dosyaya yazı yazmak için kullanılan sınıf.
- **println():** Verilen metni dosyaya yazar ve satır atlar.
### Serialization ve Deserialization
Serialization, bir nesnenin durumunun bir byte akışına dönüştürülmesi işlemidir. Deserialization ise bu byte akışının tekrar nesneye dönüştürülmesidir. Bu işlemler, nesnelerin dosyalara veya ağ üzerinden iletilmesine olanak tanır.
#### Serialization
Bir nesneyi serileştirmek için `Serializable` arayüzünü uygulamak gerekir.
```java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 30);
try (FileOutputStream fileOut = new FileOutputStream("person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
out.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
- **Serializable:** Nesnelerin serileştirilebilmesi için uygulanan arayüz.
- **FileOutputStream:** Dosyaya byte akışı yazmak için kullanılan sınıf.
- **ObjectOutputStream:** Nesneleri serileştirmek için kullanılan sınıf.
- **writeObject():** Nesneyi dosyaya yazar.
#### Deserialization
Bir nesneyi deserileştirmek için `ObjectInputStream` sınıfı kullanılır.
```java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Main {
public static void main(String[] args) {
try (FileInputStream fileIn = new FileInputStream("person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn)) {
Person person = (Person) in.readObject();
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
- **FileInputStream:** Dosyadan byte akışı okumak için kullanılan sınıf.
- **ObjectInputStream:** Nesneleri deserileştirmek için kullanılan sınıf.
- **readObject():** Dosyadan nesneyi okur.
### Özet
Bu ders notları, Java'da dosya okuma ve yazma işlemleri için `BufferedReader` ve `PrintWriter` kullanımı, ve nesnelerin serileştirilmesi ve deserileştirilmesi (Serialization ve Deserialization) konularını kapsamaktadır. Dosya işlemleri, verilerin kalıcı hale getirilmesini ve saklanmasını sağlar. Serialization, nesnelerin kalıcı hale getirilmesi ve ağ üzerinden iletilmesi için kullanılır. Bu işlemlerin doğru kullanımı, Java uygulamalarının veri yönetimi ve veri kalıcılığı konularında daha güçlü ve esnek olmasını sağlar.