Membaca Objek Java dari dalam File

Setelah postingan sebelumnya dibahas tentang cara nyimpen objek java, sekarang cara ngebacanya. Langsung ajah yah… Gw bakal bikin 1 class namanya “MainBaca.java”, yang isinya gini:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 *
 * @author arby
 */
public class MainBaca {
    public static void main(String[] args) {
        Oshi o;
        try {
            FileInputStream fis = new FileInputStream("file_oshi");
            ObjectInputStream ois = new ObjectInputStream(fis);
            o = (Oshi) ois.readObject();
            System.out.println(o);
            ois.close();
        } catch (IOException|ClassNotFoundException ex) {
            System.out.println("Error: "+ex);
        }
    }
}

Seperti yang kamu liat, kalo nyimpen pake output, kalo bacanya pakenya input. Jadi yang dipake sekarang “FileInputStream” sama “ObjectInputStream”. Di atas juga ada casting dari Object ke bentuk object yang kita mau (Oshi). Urutannya juga sama.

Sekarang, coba kamu simpen 2 objek sesuai cara dari postingan sebelumnya…. terus kamu tampilin hasilnya kayak yang ditampilin di postingan ini. Kalo kamu biasa2 aja, hasil yang keluar cuma satu objek ajah. Kalo kamu beruntung, yaaaa… bisa jadi keluar dua2nya. Kasus gw, yang keluar cuma kayak yang diliatin di bawah, padahal gw nyimpen 2 objek:

1. Satu Hasil

Terus, biar nampil jadi 2 gimana caranya? Kita tinggal modifikasi kodenya pake perulangan. Perulangannya bebas, tapi di sini gw pake while:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 *
 * @author arby
 */
public class MainBaca {
    public static void main(String[] args) {
        Oshi o;
        try {
            FileInputStream fis = new FileInputStream("file_oshi");
            ObjectInputStream ois = new ObjectInputStream(fis);
            while (true) {
                o = (Oshi) ois.readObject();
                System.out.println(o);
            }
        } catch (IOException|ClassNotFoundException ex) {
            System.out.println("Error: "+ex);
        }
    }
}

Kode yang gw modif yang warnanya biru, plus… pemanggilan method close() dari objek ois gw ilangin. Hasilnya yang keluar jadi gini:

2. All Hasil

Sekarang… kamu bakal bingung kan yah… artinya, pake perulangan yang selalu true, kita gak bakal bisa pake close(), padahal seharusnya kode itu musti ditulisin. Terus, tiba2 masuk ke dalam catch-nya. Supaya gak muncul eksepsi gimana? Yaaa… tinggal dihapus ajah kode pas nangkep catch-nya. Simple kan.. 😛

O iya, kalo kamu mau, penanganannya bisa pake pengkondisian null. Bahkan bisa pake pengecekan bentukan asal object jugak pake instanceof. Jadinya gini:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 *
 * @author arby
 */
public class MainBaca {
    public static void main(String[] args) {
        Oshi o;
        try {
            FileInputStream fis = new FileInputStream("file_oshi");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Object obj;
            while ((obj = ois.readObject()) != null) {
                if(obj instanceof Oshi){
                    o = (Oshi) obj;
                    System.out.println(o);
                }
            }
            ois.close();
        } catch (IOException|ClassNotFoundException ex) {
            System.out.println("Error: "+ex);
        }
    }
}

Hasil yang kamu temuin tetep ajah sama, kecuali pas nyimpen, kamu tambahin penyimpanan null di akhir object.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 *
 * @author arby
 */
public class Main {
    public static void main(String[] args) {
        //bentuk 1 objek Oshi
        Oshi o = new Oshi("Melody", 'J', 1992);
        Oshi o2 = new Oshi("Vienny", 'K', 1994);
        Oshi o3 = null;
        
        //menyimpan objek oshi "o"
        try {
            FileOutputStream fos = new FileOutputStream("file_oshi");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(o);
            oos.writeObject(o2);
            oos.writeObject(o3);
            oos.close();
            System.out.println("Tersimpan");
        } catch (IOException ex) {
            System.out.println("Gagal. Error: "+ex);
        }
    }
}

Kalo penyimpanan kayak di atas, hasilnya bakal gini:

3. Final

O iya, alternatif lain, kamu bisa simpan array of object-nya. Bukan objek individu. Nanti tinggal di-load, terus di-loop kayak nampilin array object. Bisa pake array beneran, bisa juga pake array list. Contohnya… uhmmm… postingan berikutnya yah… Itu pun kalo ingat. Buat sekarang, bye dulu yak… Byeee~~

Sumber: mkyong.com
Valid: Banget
Kadaluarsa: Hmmm…. (?)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s