Anda di halaman 1dari 39

BAB 1

PENDAHULUAN

A.    Latar Belakang
Pada proses pengembangan sistem sering kali kita dihadapkan kepada berbagai
ragam teknologi atau berbagai jenis teknik pembuatan program. Misalnya dalam
membuat aplikasi kita menggunakan berbagai jenis apliaksi database dengan gaya
pemrograman yang berbeda. Java memberikan fasilitas untuk menjembatani
perbedaan tersebut dengan apa yang disebut dengan interface. Interface lebih
mempermudah analyst dalam membuat konsep aplikasi, interface mirip dengan pola
atau biasa disebut dengan cetak biru aplikasi.
Apabila sbuah class java menggunakan interface maka class tersebut
mngimplementasikan interface. Pada saat class mengimplementasikan interface
walaupun semua yang ada di interface harus dicantumkan, namun tidak semuanya
harus berisi perintah atau proses. deklarasi interface harus public, karena memang
fungsi class pengguna interface adalah untuk digunakan secara public
Interface dalam kehidupan sehari-hari ibarat sebuah clausul kontrak, yang
berisi pasal-pasal, namun pasal-pasal tersebut masih kosong dan akan di isi pada saat
kontrak tersebut digunakan.

B.     Rumusan Masalah
1.      Apa pengertian Interface dalam java?
2.      Bagaiamana cara membuat dan mengimplementasikan interface?
3.      Apa tujuan dari interface?
4.      Bagaimana aturan-aturan dalam interface?
5.      Contoh program interface

C.    Tujuan
1.      Menjelaskan pengertian interface dalam java
2.      Mendeskripsikan bagaimana cara membuat dan mengimplementasikan interface
3.      Tujuan dari interface
4.      Menjelaskan bagaimana aturan-aturan dalam interface
5.      Memberikan contoh program interface dalam java

BAB 1I
PENDAHULUAN

A.    Pengertian Interface
Dalam Java, kata interface adalah kata kunci yang memiliki arti tambahan.
Suatu interface dalam hal ini adalah antar muka yang terdiri dari subrutin tanpa implementasi
apa-apa. Suatu kelas dapat mengimplementasi suatu interface dengan memberikan kode
detail pada setiap subrutin yang ditulis pada interface tersebut.
Di dalam bahasa Java, sebuah subclass merupakan turunan langsung dari satu
superclass (single inheritance). Java tidak memperbolehkan sebuah subclass diturunkan
langsung dari beberapa macam superclass (multiple inheritance). Dengan menggunakan
interfes (interface), akan diperoleh efek dari multiple inheritance.
Interface adalah class yang hanya berisi deklarasi method tanpa memiliki implementasi dan semua property yang dimilikinya bersifat
final. Interface mirip dengan class abstrak, tetapi interface tidak terikat dengan class hierarki. Interface mendefinisikan sebuah (signature) dari
sebuah kumpulan method tanpa tubuh. Interface mendefenisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class.
Interface perlu digunakan dalam kerja team,karena programer yang lain tidak perlu tahu bagaimana detail code ditulis.
Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan class-
class, tanpa memperhatikan lokasinya dalam hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa interface-
interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan
dieksekusi tergantung dari tipe object yang melewati pemanggil method interface.
Abstract class dapat memiliki tipe data dengan semua tipe data, sedangkan interface tipe datanya hanya berupa konstanta. Method
pada abstract class dapat berupa method kongkrit dan method abstract. Sedangkan pada interface semua method harus berupa method
abstract.
Sebuah Interface mendefinisikan protokol untuk berkomunikasi antar 2 object.
-          Class yang meng-implements sebuah interface harus implement semua method yang
dideclarasikan di dalam Interface.
-          Nama Interface dapa digunakan di mana saja.
Interface ini bisa diturunkan atau diwariskan kepada class yang ingin memakai method yang ada dalam masing-masing interface
tersebut dengan keyword extends[interface yang didefinisikan]. Dan juga sebuah class mengimplementasi 1 interface yang sudah dibuat
dengan keyword implements.
Class modifier implements digunakan untuk mendeklarasikan sebuah kelas (class) yang akan mengimplementasikan satu atau lebih
interface Java. Apa bila interface Java yang akan diimplementasikan lebih dari satu maka pendeklarasiannya dipisahkan dengan tanda koma.
Interface adalah kumpulan method yang hanya memuat deklarasi dan struktur method, tanpa detail implementasinya. Sedangkan
detail dari method berada pada class yang mengimplementasikan interface tersebut. Interface digunakan jika ingin mengaplikasikan suatu
method yang spesifik, yang tidak diperoleh dari proses inheritance. Interface tidak berisi perintah kepada system untuk melakukan sesuatu,
interface hanya memetakan apa yang harus dikirimkan dan apa yang diharapkan untuk dikembalikan. Tipe data yang boleh pada interface hanya
tipe data konstan.
Secara default, interface hanya dapat diimplementasikan oleh class dipaket yang sama, tetapi bila memberi modifier public berarti kita
memungkinkan class-class di luar paket dapat mengimplementasikan. Tubuh interface mengacu ke metode dan variable static final yang
menyusun interface. Untuk mendeklarasikan sebuah interface, digunakan kata kunci interface sebelum nama interface.
Syntax Dasar
1.  public interface [InterfaceName]
2.  {
3.  //beberapa method tanpa isi
4.  }
 
B.     Tujuan Interface
            Interface merupakan jembatan penghubung antara program yang satu dengan yang
lain, antara software satu dengan software lain. Interface perlu digunakan karena dalam
software enginering, program tidak perlu tahu bagaimana detail code software lain ditulis.
Contoh:
Seorang pembuat software peta, yang ingin menggunakan Gmap Api (misalnya), tidak perlu
mengetahui detail bagaimana Gmap Api ditulis, tetapi cukup tahu fungsi / method bagaimana
api tersebut bekerja.
Seorang pembuat Extention browser Firefox, tidak perlu tahu detail code Firefox, tetapi
hanya perlu mengetahui fungsi / method dasar code dari Firefox tersebut.
C.    Aturan-Aturan dalam Interface
Berikut ini adalah aturan yang harus dingat tentang pendeklarasian interface:
1.      Modifier yang digunakan hanya public atau tidak sama sekali. Jika tidak menggunakan
modifier maka interface tersebut hanya dapat diakses dalam package yang sama.
2.      Semua variabel yang dideklarasikan dalam interface secara otomatis adalah static final.
Karena itu waktu pendeklarasian harus diberikan nilai.
3.      Semua method adalah abstrak. Bedanya dengan class abstrak adalah kita tidak perlu
menuliskan keyword abstract pada saat mendeklarasikan method dalam interface.
4.      Kita dapat mengimplementasikan lebih dari satu interface (multiple inheritance) dengan
memisahkan nama dari setiap interface dengan tanda koma.
5.      Dapat terjadi saat kita mengimplementasikan lebih dari satu interface ternyata interface-
interface tersebut memiliki method yang sama. Dalam hal ini method yang akan
diimplementasi adalah method yang berada pada posisi pertama.
6.      Semua method yang diimplemetasikan harus public.
7.      Jika kita tidak mengimplementasikan semua method yang ada pada interface, maka class
tersebut harus dideklarasikan sebagai abstract class.

D.    Contoh Program Interface


Contoh Program 1
Kelas Interfacenya
1.   public interface OpsiSenjata{
2.   public void tembakSenjata();
3.   public void reloadSenjata();
4.   public void tukarSenjata(int kodesenjata);
5.   }
            Kelas yang mengimplementasi interface diatas
1.   public class Senjata implements OpsiSenjata {
2.   int pelor = 0;
3.   String[] senjata= {"M532", "Magnum", "M16", "AK47", "Kriss", "Panzerfaust"};
4.   Senjata(int pelor){
5.   this.pelor = pelor;
6.   }
7.   public void tukarSenjata(int kodesenjata) {
8.   System.out.println("Senjata tukar ke ke : " + this.senjata[kodesenjata]);
9.   }
10. 
11. public void tembakSenjata() {
12.   if (pelor != 0) {
13.     System.out.println("Dor dor dor!");
14.     this.pelor = pelor -1;
15.   } else {
16.     System.out.println("Sisa Pelor Habis");
17.   } 
18. }
19. public void reloadSenjata() {
20. System.out.println("Senjata di reload");
21. this.pelor = pelor + 7;
22. }
23. 
24.}

Tester
1.   public class Tester {
2.   public static void main(String[] args) {
3.   Senjata Gun1 = new Senjata(7);
4.   Gun1.tembakSenjata();
5.   Gun1.tembakSenjata();
6.   Gun1.reloadSenjata();
7.   Gun1.tukarSenjata(2);
8.   }
9.  }

Contoh Program 2
Kita membuat sebuah class interface, kemudian kita masukkan source code seperti dibawah
ini :
public interface JenisMakanan {
                  public void makanan();
}
     
Kemudian kita membuat class baru dengan nama "pedas" kemuidan
mengimplemenasikannya dengan class interface tadi dengan cara menambah "implements"
pada nama class tersebut dan masukkan source code seperti dibawah ini.
public class pedas implements JenisMakanan{
                  public void makanan()
                  {
System.out.println(" saya Suka Makanan Pedas, Keripik Pedas ");
}
}
     
Kita membuat satu class lagi dengan cara sama seperti class sebelumnya tetapi dengan nama
berbeda yaitu "manis" dan juga mengimplementasikannya
public class manis implements JenisMakanan {
public void makanan ()
{
System.out.Println("Saya juga Suka Makanan manis, Keripik Manis");
}
}
     
Kemudian kita membuat satu class untuk memanggil semuanya, dengan nama class
"TestInterface". Masukkan Cource code dibawah ini
public class TestInterface {
                  public static void main (string [] args) {
                        manis objectmanis = new manis() ;
                        pedas objectpedas = new pedas() ;
                        objectpedas.makanan();
                        objectmanis.makanan();
}
}

Hasil Run

BAB 111
PENUTUP

A.    Kesimpulan
Di dalam bahasa Java, sebuah subclass merupakan turunan langsung dari satu
superclass (single inheritance). Java tidak memperbolehkan sebuah subclass diturunkan
langsung dari beberapa macam superclass (multiple inheritance).
Interface adalah kumpulan method yang hanya memuat deklarasi dan struktur
method, tanpa detail implementasinya. Sedangkan detail dari method berada pada class yang
mengimplementasikan interface tersebut. Interface digunakan jika ingin mengaplikasikan
suatu method yang spesifik, yang tidak diperoleh dari proses inheritance.
Class Abstract,Package, Interface,
Pewarisan Interface pada java
Class Abstract dan method abstract
Pada Class abstract kita buat contoh seperti membuat superclass bernama LivingThing. class
ini mempunyai method tertentu seperti  eat, sleep, dan walk. Akan tetapi, ada beberapa
method di dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil contoh,
method walk. Tidak semua kehidupan berjalan(walk) dalam cara yang sama. Ambil manusia
sebagai misal, kita manusia berjalan dengan dua kaki, dimana kehidupan lainnya seperti sapi
berjalan dengan empat kaki. Akan tetapi, beberapa ciri umum dalam kehidupan sudah biasa,
itulah kenapa kita inginkan membuat superclass umum dalam hal ini.

Kita dapat membuat superclass yang mempunyai beberapa method dengan implementasi
sedangkan yang lain tidak. Class jenis ini yang disebut dengan class abstract.
Sebuah class abstract adalah class yang tidak dapat di-instantiate. Seringkali muncul di atas
hirarki class pemrograman berbasis object, dan mendefinisikan keseluruhan aksi yang
mungkin pada object dari seluruh subclasses dalam class. Bentuk umumnya sebagai berikut :
                        abstract class namaKelas{
                         //badan kelas  }

Ada beberapa aturan dalam penulisan class abstract :


         Jika sebuah kelas memiliki method abstrak maka kelas itu harus menjadi kelas abstrak.
         Sebuah kelas abstrak dapat saja memiliki method yang tidak abstrak.
         Jika sebuah kelas abstrak diturunkan menjadi kelas konkret, maka semua method abstrak
dari kelas abstrak haruslah ditulis ulang / dibuat ulang di kelas konkretnya dan diberi detail
dari methodnya.
         Jika method abstrak di turunkan dan kelas turunannya adalah kelas abstrak, maka tidak perlu
menulis ulang method yang abstrak.
Method dalam class abstract yang tidak mempunyai implementasi dinamakan method
abstract. Untuk membuat method abstract, tinggal menulis deklarasi method tanpa tubuh
class dan digunakan menggunakan kata kunci abstract. Bentuk umumnya sebagai berikut :
                        abstract tipe namaMethod(daftar-parameter);  

contoh :
public abstract void someMethod();
Sekarang mari membuat contoh class abstract.
public abstract class LivingThing {
public void breath(){
System.out.println("Living Thing breathing..."); }
public void eat(){
System.out.println("Living Thing eating..."); }
/**
* abstract method walk
* Kita ingin method ini di-overridden oleh subclasses */
public abstract void walk(); }
Ketika class meng-extend class abstract LivingThing, dibutuhkan untuk override method
abstract walk(), atau lainnya, juga subclass akan menjadi class abstract, oleh karena itu tidak
dapat di-instantiate. Contohnya,
public class Human extends LivingThing
{
public void walk(){
System.out.println("Human walks...");
} }
Jika class Human tidak dapat overridde method walk, kita akan menemui pesan error berikut
ini,

Human.java:1: Human is not abstract and does not override abstract method walk() in
LivingThing
public class Human extends LivingThing
^
1 error

Petunjuk penulisan program:


Gunakan class abstract untuk mendefinisikan secara luas sifat-sifat dari class tertinggi pada
hirarki pemrograman berbasis object, dan gunakan subclassesnya untuk menyediakan rincian
dari class abstract.

PACKAGE
Pengertian Package
 Package adalah sarana/cara pengelompokkan dan pengorganisasian kelas-kelas dan interface
yang sekelompok menjadi suatu unit tunggal dalam library.Package juga mempengaruhi
mekanisme hak akses ke kelas-kelas di dalamnya.
Fungsi Package
mengelompokkan file kelas yang terkait (karena jenisnya, fungsinya atau karena alasan
lainnya) pada direktori yang sama, dimana di dalam setiap kelasnya terdapar directive
(statement java dalam code yang digunakan untuk membuat  kelas) package yang mengacu
pada direktori tersebut.
Pengaruh Package terhadap Method main()
Kelas yang mengandung method main() memilki syarat tidak berada dalam suatu package,
dan hirarki posisi foldernya di atas package yang diimport.
Membuat Package
Ada tiga langkah untuk membuat package :
1.      Mendeklarasikan dan memberi nama package.
2.      Membuat struktur dan nama direktori yang sesuai dengan struktur dan nama package.
3.      Mengkompilasi kelas-kelas sesuai dengan packagenya masing-masing.
Mendeklarasikan dan Memberi Nama Package
Deklarasi package harus diletakkan pada bagian paling awal (sebelum deklarasi import) dari
source code setiap kelas yang dibungkus package tersebut.
Bentuk umum deklarasi package :
Deklarasi package harus diletakkan pada bagian paling awal (sebelum deklarasi import)
darisource code setiap kelas yang dibungkus package tersebut.
Bentuk umum deklarasi package :
package namaPackage;
Deklarasi tersebut akan memberitahukan kompilator, ke library manakah suatu kelas
dikompilasi dan dirujuk. Contoh:
Package ContohPKg;
Dimana java menggunakan sistem direktori untuk menyimpan paket yang dibuat. Sebagai
contoh apabila kita membuat paket dengan nama ContohPkg , maka kita harus memiliki
sebuah direktori bernama ContohPkg di dalam tempat kita membuat kode program utama.
Dan nama paket dan nama direktori harus benar benar sama penulisan hurufnya.
Syarat nama package :
         Diawali huruf kecil
         Menggambarkan kelas-kelas yang dibungkusnya
         Harus unik (berbeda dengan nama package standard)
         Merepresentasikan path dari package tersebut.
         Harus sama dengan nama direktorinya.
Contoh package standard :
1.      java.lang (berisi kelas-kelas fundamental yang sering digunakan).
2.      java.awt dan javax.swing (berisi kelas-kelas untuk membangun aplikasi GUI)
3.      java.io (berisi kelas-kelas untuk proses input output)
Membuat Struktur Direktori
Pada langkah ini, buatlah direktori menggunakan file manager (di windows menggunakan
explorer) sesuai struktur package dari langkah sebelumnya.
Kemudian tempatkan kelas-kelas tersebut ke direktori yang bersesuaian (mirip seperti 
menyimpan file-file ke dalam folder).
Package dapat bersarang di package lain, sehingga dapat dibuat hirarki package.

Bentuk umum pernyataan package multilevel/package di dalam package :


package namaPackage1[.namaPackage2[.namaPackage3]];
Contoh hirarki package di JDK :
package java.swing.event ;
File kode .java dan file .class dari paket tersebut harus disimpan di dalam direktori
java/swing/event (dalam sistem operasi windows maupun Unix/Linux) paket yg dibuat tidak
dapat diubah tanpa mengubah nama directorinya.
Compile dan Run Kelas dari suatu Package
Selanjutnya masing-masing kelas tersebut dalam package tersebut dikompilasi menjadi byte
code (*.class). Artinya package tersebut siap digunakan.
Menggunakan Package
Ada dua cara menggunakan suatu package yaitu :
Kelas yang menggunakan berada dalam direktori (package) yang sama dengan kelas-kelas
yang digunakan. Maka tidak diperlukan import.
Kelas yang menggunakan berada dalam direktori (package) yang berbeda dengan kelas-kelas
yang digunakan. Maka pada awal source code di kelas pengguna harus mencantumkan :
import namaPackage.NamaKelas;  atau    import namaPackage.*;
Contoh :
import java.text.DecimalFormat;
import javax.swing.*;

                                                                           INTERFACE
                                                                     Pengertian Interface

Interface adalah wadah dari kumpulan method yang bersifat abstrak atau tidak memiliki
implementasi. Sedangkan method yang didefinisikan di dalam interface tersebut akan
diimplementasikan oleh class yang mengimplementasikan interface tersebut. Interface
merupakan bentuk perluasan dari kelas abstrak.
Selain method, interface juga dapat berisi sekumpulan variable, namun variable yang
dideklarasikan di dalam interface harus bersifat final(nilainya tidak dapat diubah /konstan).
Sebagai contoh : Dalam kehidupan nyata dapat diketahui ada manusia yang bekerja sebagai
tentara, penyanyi, pengacara, dan sebagainya, tentunya manusia-manusia tersebut selain
harus memiliki method standard sebagai seorang manusia, juga harus memiliki method yang
sesuai dengan pekerjaannya. Dengan demikian untuk membuat objek manusia yang bekerja
sebagai penyanyi, harus dibuat kelas yang merupakan turunan kelas manusia yang meng-
implementasikan interface penyanyi.
Ciri-ciri dari interface
Method interface tidak punya tubuh, sebuah interface hanya dapat mendefinisikan konstanta
dan interface tidak langsung mewariskan hubungan dengan class istimewa lainnya, mereka
didefinisikan secara independent.
Tidak bisa membuat instance atau objek baru dari sebuah interface.
Ciri umum lain adalah baik interface maupun class dapat mendefinisikan method.
Bagaimanapun, sebuah interface tidak punya sebuah kode implementasi sedangkan class
memiliki salah satunya.
Beberapa perbedaan Interface dan Abstract Class :
- Interface hanya bisa mendefinisikan Method, tidak bisa mengimplementasikan,
sedangkan Abstrat Class bisa mengimplementasikan Method
- Interface tidak boleh terdiri dari field atau property, Abstract Class bias
- Interface tidak boleh terdiri dari konstruktor dan destruktor, sedangkan Abstract class bisa:
Abstract class Interface
Bisa berisi abstract dan non-abstract method. Hanya boleh berisi abstract method.
Kita harus menuliskan sendiri modifiernya. Kita tidak perlu susah2 menulis public abstract di
depan nama method. Karena secara implisit,
modifier untuk method di interface
adalah public danabstract.
Bisa mendeklarasikan constant dan instance variable. Hanya bisa mendeklarasikan constant.  Secara
implisit variable yang dideklarasikan di interface
bersifatpublic, static dan final.
Method boleh bersifat static. Method tidak boleh bersifat static.

Method boleh bersifat final. Method tidak boleh bersifat final.

Suatu abstact class hanya bisa meng-extend satu abstract Suatu interface bisa meng-extend  satu atau lebih
class lainnya. interface lainnya.

Suatu abstract class hanya bisa meng-extend satu abstract Suatu interface hanya bisa meng-extend interface
class dan meng-implement beberapa interface. lainnya.  Dan tidak bisa meng-implement class atau
interface lainnya.

perbedaan class abstract dan interface


         Abstract Class dikatakan Abstract karena class tersebut tidak diimplementasikan secara
langsung di class tersebut. Melainkan diimplementasikan di class lain yang merupakan class
anak dari abstract class itu. Itulah sebabnya dinamakan abstract class. Berikut perbedaan
antara class abstract dengan interface:
         Abstract class dapat memiliki tipe data dengan semua tipe data, sedangkan interface tipe
datanya hanya berupa konstanta
         Method pada abstract class dapat berupa method kongkrit dan method abstract. Sedangkan
pada interface semua method harus berupa method abstract.
         Interface Class jelas berbeda dengan abstract class. Karena class ini mengimplementasikan
methodnya di class lain dihubungkan dengan kata "implements". Method class interface tadi
diimplementasikan dengan nama method yang sama di class yang diimplementasikan.
Contoh Abstract Class :

   public abstract class MahlukHidup {


          protected boolean BisaTerbang = false;
          protected String Nama;
                   abstract void bernafas ( ) ;
                                                                           
      Dari contoh di atas dapat kita lihat bahwa pada abstract class Mahluk hidup terdapat 1
method yang tidak memiliki implementasi. Implementasi method bernafas nanti akan
diimplementasikan di class anak karena biasanya class abstract dapat menjadi class induk.

 Contoh Interface Class :


interface Pekerjaan {
           public void namaPekerjaan ( ) ;

                                                            
                  Pada contoh interface class di atas  dapat dilihat perbedaan antara abstract class
dan interface class. Interface class memiliki method yang tidak memiliki im- plementasi.

Pewarisan Interface
Sebuah kelas dapat mewarisi interface dengan menggunakan kata kunci implements, dimana
kelas tersebut dapat mewarisi beberapa interface.
Contoh Mewarisi Interface 
public class NamaKelas 
    implements NamaInterface {
    public void namaProsedur(){
        // isi prosedur     }
    public TipeData namaFungsi(){
        // isi fungsi     }}

Pewarisan Antar Interface Interface dapat mewarisi interface lainnya menggunakan kata kunci extends.
Interface dapat mewarisi lebih dari satu interface.

Contoh Pewarisan Antar Interface


public interface NamaInterface
    extends InterfaceLain, InterfaceDua {
    // isi interface }

Sumber:
http://rimanda567rifarifiy.blogspot.com/p/abstact-class.html
https://www.google.com/#q=+pewarisan+interface
https://www.google.com/#q=+peckage+pada+java

http://www.termasmedia.com/2012-05-29-02-56-17/java/118-pengertian-fungsi-dan-kegunaan-paket-package-di-java.html
I/ O (I NP UT/ OU TP UT ) STR EA M
SENIN, MAR ET 12, 2012

Pengertian I/O Stream


 I/O -> adalah singkatan dari Input / Output dan mengacu pada transfer data ke atau dari aplikasi.
Stream ->  Keadaan dari sebuah file atau sebuah device yang memungkinkan rangkaian
item dapat dibaca atau ditulis

Input atau Stream Sumber


- Dari stream ini dapat membaca

- Superclass dari semua input streams:

* Class InputStream

* Class Reader

Output

- Kita dapat menulis pada stream ini

- Class root dari stream ini:

* Class OutputStream

* Class Writer 

Overview I/O 
1. Konsep Stream
2. Kelas Abstrak pada java.io
3. Reader/Writer
4. Input dan Output file
5. Wrapper

1. Konsep Stream
• Stream adalah suatu abstraksi untuk data input dan output.
– Tidak peduli dari mana input berasal atau kemana output akan pergi 

 
 

Package java.io

• Package java.io berisi kelas yang berhubungan dengan I/O di Java


• Dibagi menjadi beberapa kelas

– Reader/Writer dan turunannya

– InputStream/OutputStream dan turunannya


– I/O Network (socket TCP/IP)
– Exception

2. Kelas Abstrak pada java.io

• Ada 4 kelas abstrak dasar

– Reader
– Writer
– InputStream
– OutputStream
• Reader dan Writer digunakan untuk data Teks
• InputStream dan OutputStream digunakan untuk data biner

3. Kelas Reader/Writer

• Kelas Reader/Writer bekerja pada stream teks (bahasa apapun)

• Disebut juga character stream


• Menangani konversi teks Unicode secara otomatis
• Jangan dipertukarkan dengan InputStream/OutputStream secara sembarangan
• Hasilnya bisa error 

Diagram Kelas Reader dan Turunannya 

 
Diagram Kelas Writer dan Turunannya

Kelas InputStream/OutputStream

• InputStream dan OutputStream digunakan untuk mengakses informasi non teks (biner)

– disebut juga sebagai byte stream


– COntoh data biner: File EXE, file GIF
• InputStream/OutputStream Tidak menangani konversi teks Unicode secara otomatis

Diagram Kelas InputStream dan turunannya

Diagram Kelas OutputStream dan turunannya


4. Input dan Output File

• Gunakan FileInputStream dan FileOutputStream untuk membaca/menulis file non teks

• Gunakan FileReader/FileWriter untuk file teks

Contoh Membuka file untuk dibaca

• cara untuk membuka file (untuk dibaca):


FileInputStream s = new
FileInputStream(“test.dat”);
• Cara untuk membaca satu byte: int a = s.read()
• Tersedia juga method untuk membaca array of byte
• Prototype read adalah : int read()
– Perlu dicast ke byte untuk membaca sebagai byte
– Memakai int supaya cukup merepresentasikan -1

Contoh Membuka file untuk ditulis

• Cara untuk membuka file (untuk ditulisi):


FileOutputStream out = new
FileOutputStream(“test.out”);
• Intruksi untuk menulis satu byte:
– Out.write(‘a’)
• Tersedia juga method untuk menulis array of byte

Perhatikan:

• Membaca dan menulis selalu perlu try … catch


• Method read() dan write() melempar Exception java.lang.IOException
• Kasus khusus: read() mengembalikan
-1 pada end of file
• EOF (End Of File atau EndOfStream) tidak menimbulkan exception

Memakai FileReader/FileWriter
• Sama seperti contoh sebelumnya
– Ganti nama kelas FileInputStream
dengan FileReader dan FileOutputStream
dengan FileWriter
– Tetap gunakan read/write
• Perhatikan bahwa
– Nilai kembalian

5. Wrapper• Stream dapat dikomposisi atau difilter atau dibungkus untuk menghasilkan
stream yang lebih kompleks
• Konsep ini mirip dengan pipe di
Unix/Windows
• Contoh:
– BufferedReader yang menyediakan readLine()
– PipedWriter/PipedReader untuk mempipe suatu stream
– PrintStream/PrintWriter untuk menulis ke stream dengan mudah

 Contoh Wrapper: BufferedReader


• Perhatikan potongan kode berikut:
BufferedReader br = new
BufferedReader(new
FileReader(“hello.txt”));
//membaca 1 baris
String teks = br.readLine();
• BufferedReader membungkus (wraps) FileReader untuk menyediakan method readLine()

Contoh Wrapper: PrintWriter


• Perhatikan potongan kode berikut:
PrintWriter pr = new PrintWriter(new FileWriter(“hello.txt”)); //Menulis 1 baris
pr.println(“Hello “);
• PrintWriter membungkus (wraps) FileWriter untuk menyediakan method print(), println()
untuk semua tipe data dasar 

Membaca dari Console [1]


• Java menyediakan System.in yang class-nya adalah InputStream
• Membaca teks dari console
• Untuk membaca teks, perlu di-wrap dengan BufferedReader
• Tapi BufferedReader hanya bisa mewrap suatu class turunan Reader
• InputStream perlu di-wrap dengan InputStreamReader
Membaca dari console [2]
• Buat BufferedReader yangmembungkus InputStreamReader yang membungkus System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in))
• Untuk membaca:
String s = br.readLine();
• Untuk membaca integer, teks dibaca dengan method yang sama, lalu dikonversi dengan
method Integer.parseInt()

NIO (Nonblocking I/O)


• JDK 1.4 (nama Kode: Merlin) ke atas menyediakan NIO
– Ada di package java.nio
• Improvement:
– Non blocking I/O
– Buffer
– Regular Expression

[2] String dan StringBuffer

 *String
• Merupakan kelas khusus di Java (ditangani secara transparan)
• Sifatnya immutable (tidak bisa diubah)
• Memiliki berbagai method untuk memiliki manipulasi String

*Literal String
• Harap diingat lagi bahwa:
– Setiap Literal String adalah sebuah objek
String. Contoh:
String teks = “Hello”;
System.out.println(teks.length());
– Sama dengan
System.out.println(“Hello”.length()); 

*Sifat Immutable String


• String sebenarnya tidak dapat diubah, namun Java memungkinkan String seolah-olah
diubah, Contoh:
– Jika dilakukan ini:
String judul = "Judul :";
judul += "Eyes On Me";
– Maka sebenarnya yang dilakukan adalah ini
String judul = "Judul :";
judul = judul.concat("Eyes On Me"); 
*Operasi String Tidak Optimal
• String baru diciptakan (string yang lama tetap ada di memori, dan dibuang ketika terjadi
garbage collection)
• Untuk operasi yang banyak melibatkan perubahan string, sebaiknya menggunakan
StringBuffer 

*StringBuffer
• StringBuffer mirip dengan String
• Sifatnya mutable
• Tidak ditangani secara transparan oleh Java (harus dilakukan secara manual)
• Lebih cepat untuk manipulasi string yang memerlukan perubahan pada String. 

*Sifat mutable StringBuffer


• Untuk mengubah StringBuffer tidak perlu objek baru
– Contoh :
StringBuffer nama = new StringBuffer("mataku");
nama.setCharAt(4, 'm');
• Untuk mengubah String selalu butuh objek baru (objek lama diubah melalui assignment) 

*Method yang penting


• Beberapa method String dan StringBuffer yang penting adalah:
– length(): panjang string
– replace(): mengganti suatu karakter
– charAt(): mengakses karakter di posisi tertentu
– trim(): menghilangkan spasi di awal dan di akhir string
• Perhatikan bahwa meskipun namanya sama, sifat keduanya berbeda
– String menciptakan objek baru, sedangkan StringBuffer tidak 

*Membandingkan String
• Method equals() membandingkan string untuk memeriksa kesamaan
• Method equalsIngnoreCase() melakukan hal yang sama, tapi besar kecil huruf tidak
diperhatikan
• Method compareTo() menghasilkan 0 jika string sama, >0 jika String1>String2 dan <0 jika
String1<String2 

[3] Kelas Matematik 

*Matematika di Java
• Fungsi matematika ada di package java.math
• Meliputi fungsi trigonometri, dan fungsi matematika standar
– Berisi juga konstanta penting (seperti PI dan e)
– Sebagian besar hasil method adalah bilangan riil (tipenya double ) 

*Memformat Hasil
• Class math tidak menyediakan cara untuk memformat keluaran (output) sehingga dapat
dicetak dengan rapi
• Perlu class DecimalFormat untuk melakukan format terhadap output (DecimalFormat ada
pada package java.text) 

*Beberapa fungsi matematika yang penting


• Method pow() untuk pangkat
• Fungsi-fungsi trigonometri (sin, cos, tan)
• Pembulatan hasil, meliputi
– ke atas : ceil, ke bawah: floor, dan terdekat : round
• Logaritma 

*Bilangan Acak
• Bilangan acak sangat penting dalam simulasi, permainan, dan enkripsi
• Bilangan acak dihasilkan dengan kelas Random
• Kelas Random tidak berada dalam package java.math, tapi dalam kelas java.util
– Contoh:
Random r = new Random();
int x = r.nextInt(10); //random 0..9 

*BigInteger dan BigDecimal


• BigInteger
– Integer presisi tak hingga
– Berisi semua method untuk operasi integer dan bahkan method untuk mengecek
probabilitas suatu bilangan adalah prima
• BigDecimal
– Bilangan floating point presisi tak hingga
– Semua method untuk doube/float 

[4] Utility 

*Utility
• Berbagai macam kelas yang tidak cocokdimasukkan ke package tertentu
• Beberapa yang akan dibahas
– Hashtable
– Stack
– Vector
– Calendar
• Kelas lain yang cukup berguna untukdipelajari: List, Tree 

*Hashtable
• Digunakan untuk menyimpan data dengan assosiasi tertentu
– Misal nama panggilan diassosiasikan dengan nama lengkap
• Memetakan suatu nilai String dengan suatu Objek tertentu (Objek apa saja, termasuk juga
Objek String)
• Method yang dipakai adalah put dan get

*Contoh
import java.util.Hashtable;
class HashtableDemo {
public static void main(String argv[]) {
Hashtable h = new Hashtable();
h.put("Linux", "Torvalds");
h.put("Windows", "Microsoft");
String nama = (String) h.get("Linux");
if (nama!=null) {
System.out.println(nama);
}
}

*Stack
• Struktur data LIFO (Last In First Out)
– Data yang masuk pertama akan keluar terakhir
• Memakai Method push, untuk meletakkan satu item di Stack dan pop untuk mengeluarkan
satu item dari stack
– Ada juga method peek() untuk mengintip top of stack dan search untuk mencari elemen di
Stack() 

*Contoh Stack
import java.util.Stack;
class StackDemo {
public static void main(String argv[]) {
Stack s = new Stack();
s.push("Salamku Kawan");
s.push("Jangan Takut Gelap");
s.push("Gembira berkumpul");
while (!s.empty()) {
System.out.println(s.pop());
}
}

*Vector
• Struktur data seperti array
• Sifatnya dinamis (ukurannya tidak tetap), berubah sesuai dengan elemen yang
ditambahkan ke (atau dihapus dari)
Vector tersebut
• Dapat dimanipulasi dengan mudah (elemen-elemennya dapat di add, remove, atau diubah
dengan mudah) 

*Contoh Vector
import java.util.Vector;
import java.util.Enumeration;
class VectorDemo {
public static void main(String argv[]) {
Vector v = new Vector();
/* tambahkan elemen */
v.add("Pelangiku");
v.add("Andai Aku Besar Nanti");
v.add("Dua Balerina");
for (int i=0; i<v.size(); i++){
System.out.println(" - " + v.elementAt(i));
}
}

*Calendar
• Dipakai untuk menangani perhitungan kalender Masehi (Gregorian)
– Dirancang untuk mendukung kalender lain
• Menyediakan informasi mengenai tanggal, (date) dan waktu (time) saat ini (misalnya hari
apa, bulan ke berapa, hari keberapa dalam tahun ini)
• Menyediakan sarana untuk penghitungan waktu

*Contoh Calendar
import java.util.Calendar;
class Kalender {
public static void main(String argv[]) {
Calendar c = Calendar.getInstance();
System.out.println("Hari ini :");
System.out.println("Hari ke“
+c.get(Calendar.DAY_OF_WEEK)+" dalam
minggu ini");
}}

CONTOH PENERAPAN

package testjeni_02;
import java.io.*;

/**
 *
 * @author NieNov
 */
public class FileInfoClass {
public static void main(String args[]) {
String fileName = "C://Price Tag.txt";
File fn = new File(fileName);
System.out.println("Name: " + fn.getName());
if (!fn.exists()) {
System.out.println(fileName + " does not exists.");
/* membuat sebuah temporary directory . */
System.out.println("Creating temp directory...");
fileName = "temp";
fn = new File(fileName);
fn.mkdir();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
System.out.println("Deleting temp directory...");
fn.delete();
System.out.println(fileName +
(fn.exists()? "exists": "does not exist"));
return;
}
System.out.println(fileName + " is a " +
(fn.isFile()? "file." :"directory."));
if (fn.isDirectory()) {
String content[] = fn.list();
System.out.println("The content of this directory:");
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
}
if (!fn.canRead()) {
System.out.println(fileName + " is not readable.");
return;
}
System.out.println(fileName + " is " + fn.length() +
" bytes long.");
System.out.println(fileName + " is " + fn.lastModified()
+ " bytes long.");
if (!fn.canWrite()) {
System.out.println(fileName + " is not writable.");
}
}
}

dan outputnya

 
nah sekarang kita beranjak ke Stream I/O pada java, Ini adalah contoh penerapan Aplikasi/ Program Stream IO yang digunakan pada
Pemrograman Java. Biasanya ini digunakan pada pembuatan program enkripsi. Nah, langsung saja simak penjelasan dari ulasan berikut ini...

Tipe-Tipe Stream yang Umum Digunakan

Stream Karakter dan Byte

Seperti yang elah disebutkan sebelumnya, secara umum ada dua tipe dari stream, yaitu
stream karakter dan byte. Kita hanya mengulang perbedaan mendasar antara keduanya.
Stream byte adalah abstraksi file atau alat untuk data biner sedangkan stream karakter
adalah untuk karakter Unicode.

Class InputStream adalah abstraksi class root untuk semua input stream byte sedangkan
class OutputStream adalah class root abstraksi dari semua output stream byte. Untuk
stream karakter, superclasss yang sesuai dari semua class-class secara berturut-turut

adalah class Reader dan the Writer. Kedua class-class ini adalah abstraksi class-class untuk


membaca dan menulis stream karakter.

Input dan Output Stream

Stream juga dikategorikan berdasarkan apakah mereka digunakan untuk membaca atau
menulis stream.Walaupun ini sudah cukup nyata, izinkan saya untuk mendefinisikan tipe
stream ini. Anda diijinan untuk membaca dari input stream tapi tidak menulisnya. Di lain
pihak, Anda diijinkan untuk menulis output streams tapi tidak membacanya.
Class InputStream dan class Reader adalah superclass-superclass dari semua input stream.
Class OutputStream dan class Writer adalah class-class root dari semua output stream.
Input stream juga dikenal sebagai stream sumber (source stream) sejak kita
memperoleh informasi dari stream ini. sementara itu output stream disebut juga stream

hasil(sink stream).

Node dan Stream Filter

Kini package java.io membedakan antara node dan stream filter. Sebuah stream node
adalah sebuah stream dengan fungsi dasar berupa fungsi membaca atau menulis dari
sebuah lokasi khusus seperti pada disk atau dari jaringan. Tipe-tipe dari stream node
terdiri atas file, memory dan jalur data. Stream filter, di lain pihak, diletakkan pada layer
stream node diantara threads atau proses untuk menyediakan fungsi tambahan yang
tidak dapat ditemukan dalam stream node oleh stream node itu sendiri. Penambahan

lapisan pada sebuah stream node disebut dengan stream chaining. Sesi ini berturut-
turut mempunyai sebuah tujuan dariclass-class stream yang berbeda. Untuk melengkapi
daftar dari class-class ini, silahkan melihat dokumentasi Java's API.

Stream, Reader, dan Writer


                     Tanpa bisa berinteraksi dengan dunia lain, suatu program tidak ada gunanya. Interaksi suatu program dengan dunia lain sering
disebut input/output atau I/O. Sejak dulu, salah satu tantangan terbesar untuk mendesain bahasa pemrograman baru adalah mempersiapkan fasilitas untuk
melakukan input dan output. Komputer bisa terhubung dengan beragam jenis input dan output dari berbagai perangkat. Jika bahasa pemrograman harus
dibuat secara khusus untuk setiap jenis perangkat, maka kompleksitasnya akan tak lagi bisa ditangani.
                     Salah satu kemajuan terbesar dalam sejarah pemrograman adalah adanya konsep (atau abstraksi) untuk memodelkan perangkat I/O. Dalam
Java, abstraksi ini disebut dengan aliran (stream). Bagian ini akan memperkenalkan tentang aliran, akan tetapi tidak menjelaskan dengan komplit. Untuk
lebih lengkapnya, silakan lihat dokumen resmi Java.

                      Ketika berhubungan dengan input/output, kita harus ingat bahwa ada dua kategori data secara umum : data yang dibuat oleh mesin, dan
data yang bisa dibaca manusia. Data yang dibuat mesin ditulis dengan model yang sama dengan bagaimana data tersebut disimpan di dalam komputer,
yaitu rangkaian nol dan satu. Data yang bisa dibaca manusia adalah data dalam bentuk rangkaian huruf. Ketika kita membaca suatu bilangan 3.13159, kita
membacanya sebagai rangkaian huruf yang kita terjemahkan sebagai angka. Angka ini akan ditulis dalam komputer sebagai rangkaian bit yang kita tidak
mengerti.

                     Untuk menghadapi kedua jenis data ini, Java memiliki dua kategori besar untuk aliran : aliran byte untuk data mesin (byte stream), dan aliran
karakter (character stream) untuk data yang bisa dibaca manusia. Ada banyak kelas yang diturunkan dari kedua kategori ini.

                     Setiap objek yang mengeluarkan data ke aliran byte masuk sebagai kelas turunan dari kelas abstrak OutputStream. Objek
yangmembaca data dari aliran byte diturunkan dari kelas abstrak InputStream. Jika kita menulis angka ke suatu OutputStream, kita
tidak akan bisa membaca data tersebut karena ditulis dalam bahasa mesin. Akan tetapi data tersebut bisa dibaca kembali oleh InputStream.
Proses baca tulis data akan menjadi sangat efisien, karena tidak ada penerjemahan yang harus dilakukan : bit yang digunakan untuk menyimpan data di
dalam memori komputer hanya dikopi dari dan ke aliran tersebut.

                    Untuk membaca dan menulis data karakter yang bisa dimengerti manusia, kelas utamanya adalah Reader dan Writer. Semua kelas
aliran karakter merupakan kelas turunan dari salah satu dari kelas abstrak ini. Jika suatu angka akan ditulis dalam aliran Writer, komputer harus bisa
menerjemahkannya ke dalam rangkaian karakter yang bisa dibaca maunsia.

                    Membaca angka dari aliran Reader menjadi variabel numerik juga harus diterjemahkan, dari deretan karakter menjadi rangkaian bit yang
dimengerti komputer. (Meskipun untuk data yang terdiri dari karakter, seperti dari editor teks, masih akan ada beberapa terjemahan yang dilakukan.
Karakter disimpan dalam komputer dalam nilai Unicode 16-bit. Bagi orang yang menggunakan alfabet biasa, data karakter biasanya disimpan dalam file
dalam kode ASCII, yang hanya menggunakan 8-bit. Kelas Reader dan Writerakan menangani perubahan dari 16-bit ke 8-bit dan sebaliknya, dan
juga menangani alfabet lain yang digunakan negara lain.)

                     Adalah hal yang mudah untuk menentukan apakah kita harus menggunakan aliran byte atau aliran karakter. Jika kita ingin data yang kita
baca/tulis untuk bisa dibaca manusia, maka kita gunakan aliran karakter. Jika tidak, gunakan aliran
byte. System.in danSystem.out sebenarnya adalah aliran byte dan bukan aliran karakter, karenanya bisa menangani input selain alfabet,
misalnya tombol enter, tanda panah, escape, dsb.

                    Kelas aliran standar yang akan dibahas berikutnya didefinisikan dalam paket java.io beserta beberapa kelas bantu lainnya. Kita harus
mengimpor kelas-kelas tersebut dari paket ini jika kita ingin menggunakannya dalam program kita. Artinya dengan menggunakan
"import java.io.*" di awal kode sumber kita.

                    Aliran tidak digunakan dalam GUI, karena GUI memiliki aliran I/O tersendiri. Akan tetapi kelas-kelas ini digunakan juga untuk file atau
komunikasi dalam jaringan. Atau bisa juga digunakan untuk komunikasi antar thread yang sedang bekerja secara bersamaan. Dan juga ada kelas aliran
yang digunakan untuk membaca dan menulis data dari dan ke memori komputer.

File
Data dan program pada memori komputer hanya bisa bertahan selama komputer itu nyala. Untuk tempat penyimpanan yang lebih lama, komputer
menggunakan file, yaitu kumpulan data yang disimpan dalam hard disk, disket atau CD-ROM, USB stick, dan lain-lain. File disusun dalam direktori (atau
sering juga disebut folder). Direktori bisa terdiri dari direktori lain atau file lain. Nama direktori dan file digunakan untuk mencari suatu file dalam komputer.

Program dapat membaca data dari file yang sudah ada. Program juga bisa membuat file baru atau menulis data ke dalam file yang sudah ada. Dalam Java,
input dan output seperti ini bisa menggunakan aliran (stream). Data karakter yang bisa dibaca manusial dapat dibaca dari file dengan menggunakan objek
dari kelas FileReader yang merupakan kelas turunan Reader. Data bisa ditulis dalam bentuk yang bisa dibaca manusia dengan
menggunakan FileWriter yang merupakan kelas turunan dari Writer.

Untuk membaca atau menyimpan suatu file dalam format mesin, kelas I/O-nya adalah FileInputStream danFileOutputStream.
Semua kelas ini didefinisikan dalam paket java.io.

Perlu dicatat bahwa applet yang didownload dari suatu jaringan pada umumnya tidak bisa mengakses file karena pertimbangan keamanan. Kita bisa
mendownload dan menjalankan applet, yaitu dengan mengunjungi halaman web pada browser kita. Jika applet tersebut bisa digunakan untuk mengakses
file pada komputer kita, maka orang bisa membuat applet untuk menghapus semua file dalam komputer yang mendownloadnya.
Untuk mencegah hal seperti itu, ada beberapa hal di mana applet yang didownload tidak bisa lakukan. Mengakses file adalah salah satu hal yang dilarang.
Akan tetapi program desktop bisa memiliki akses ke file kita seperti program-program lainnya. Program desktop bisa melakukan akses file yang dijelaskan
pada bagian ini.

Kelas FileReader memiliki konstruktor yang mengambil nama file sebagai parameternya, kemudian membuat aliran input yang bisa digunakan
untuk membaca file tersebut. Konstruktor ini akan melemparkan pengecualian bertipe FileNotFoundExceptionjika file tersebut tidak
ditemukan.

Jenis pengecualian seperti ini membutuhkan penanganan wajib, sehingga kita harus memanggil konstruktor di dalam pernyataan try atau menambahkan
pernyataan throw di kepala subrutin yang menjalankan konstruktor tersebut. Milsanya, anggap kita memiliki file bernama " data.txt", dan kita
ingin membuat program untuk membaca data pada file tersebut. Kita bisa menggunakan pernyataan berikut untuk membaca aliran input dari file tersebut :

// (Mendeklarasikan variabel sebelum pernyataan try


// jika tidak, maka variabel tersebut hanya bisa
// dilihat di dalam blok try, dan kita tidak bisa
// menggunakannya lagi di bagian program lain
FileReader data;
 
try {
// buat aliran input
data = new FileReader("data.txt");
}
catch (FileNotFoundException e) {
... // lakukan sesuatu untuk menangani kesalahan
}
Kelas FileNotFoundException merupakan kelas turunan dari IOException, sehingga kita bisa
menangkap IOException pada pernyataan try...catch di atas. Secara umum, hampir semua kesalahan yang terjadi pada saat operasi
input/output dapat ditangkap dengan pernyataan catch yang menangani IOException.

Begitu kita berhasil membuat FileReader, kita bisa mulai membacanya. Tapi karena FileReader hanya memiliki metode input primitif dari
standar kelas Reader, kita mungkin akan perlu membungkusnya dalam objek lain, misalnya BufferedReader atau kelas pembungkus lain.
Untuk membuat BufferedReader untuk membaca file bernama "data.dat", kita bisa gunakan :

TextReader data;
try {
data = new BufferedReader(new FileReader("data.dat"));
}
catch (FileNotFoundException e) {
... // tangani pengecualian
}
BufferedReader memiliki metode bantu untuk mengambil data per baris dengan perintah readline(). Sehingga apabila satu data
ditulis dalam urutan per baris, kita bisa gunakan perintah Double.parseDouble(string) atau Integer.parseInt(string) untuk mengubahnya menjadi double
atau int.

Untuk menyimpan data tidaklah lebih sulit dari ini. Kita bisa membuat objek bertipe FileWriter. Dan kemudian kita mungkin ingin membungkus
aliran output ini dalam objek PrintWriter. Misalnya, kita ingin menyimpan data ke file yang bernama "hasil.dat", kita bisa menggunakan :

PrintWriter result;
 
try {
keluaran = new PrintWriter(new FileWriter("hasil.dat"));
}
catch (IOException e) {
... // tangani pengecualian
}
Jika tidak ada file bernama "hasil.dat", maka file baru akan dibuat. Jika file sudah ada, maka isinya akan dihapus dan diganti dengan data yang ditulis oleh
program kita. Pengecualian IOException bisa terjadi jika, misalnya, file tersebut sedang dibaca oleh program lain, sehingga sistem operasi
menolak program kita untuk menulisnya pada saat yang sama.
Setelah kita selesai menggunakan file, sebaiknya anda menutup file tersebut, atau mengatakan kepada sistem operasi bahwa kita telah selesai
menggunakan file itu (Jika kita lupa, sistem operasi akan menutup file secara otomatis setelah program selesai dijalankan atau objek aliran file diambil oleh
pemulung memori, akan tetapi akan sangat baik jika kita menutup file secara manual untuk menghindari kemungkinan lainnya).

Kita bisa menutup file dengan menggunakan metode close() pada aliran tersebut. Setelah file telah ditutup, maka kita tidak mungkin lagi membaca
atau menulis data dari atau ke file tersebut. Kita harus membukanya kembali. (Perlu dicatat bahwa penutupan file juga bisa melemparkan
pengecualian IOException yang wajib ditangani, akan tetapi PrintWriter menangani pengecualian tersebut secara otomatis sehingga
kita tidak perlu menanganinya lagi).

Sebagai contoh komplit, berikut ini adalah program yang akan membaca angka dari file bernama "data.dat", dan kemudian menuliskannya kembali dalam
urutan terbalik ke dalam file yang bernama "hasil.dat". Dalam file tersebut hanya akan ada satu angka untuk setiap barisnya dan diasumsikan tidak ada
lebih dari 1000 angka sekaligus. Penanganan pengecualian digunakan untuk mengecek apakah ada masalah di tengah operasi. Meskipun mungkin tidak
begitu berguna untuk aplikasi sungguhan, akan tetapi program ini mendemonstrasikan bagaimana menggunakan operasi baca tulis sederhana pada file.

package balikfile;
 
import java.io.*;
 
public class BalikFile {
 
/**
* @param args
*/
public static void main(String[] args) {
BufferedReader data; // Aliran input karakter untuk membaca data
PrintWriter hasil; // Aliran output karakter untuk menulis data
 
// Array untuk menampung semua angka dari dalam file
double[] angka = new double[1000];
 
int banyakAngka; // Banyaknya angka yg disimpan dlm array
 
try { // Buat aliran input
data = new BufferedReader(new FileReader("data.dat"));
}
catch (FileNotFoundException e) {
System.out.println("Tidak bisa menemukan data.dat!");
return; // akhiri program
}
 
try { // Membuat aliran output
hasil = new PrintWriter(new FileWriter("hasil.dat"));
}
catch (IOException e) {
System.out.println("Tidak bisa membuka hasil.dat!");
System.out.println(e.toString());
try {
data.close(); // Tutup file input
}
catch (IOException f) {
System.out.println("Tidak bisa menutup data.dat");
}
return; // End the program.
}
 
String baris = null; // variabel untuk menyimpan satu baris teks
 
try {
// Baca data dari file input
banyakAngka = 0;
while ((baris = data.readLine()) != null) { // baca hingga
habis
angka[banyakAngka] = Double.parseDouble(baris);
banyakAngka++;
}
 
// Tulis hasilnya dalam urutan terbalik
for (int i = banyakAngka-1; i >= 0; i--)
hasil.println(angka[i]);
 
System.out.println("Selesai!");
 
}
catch (IOException e) {
// Ada masalah dengan pembacaan/penulisan file
System.out.println("Kesalahan baca/tulis");
}
catch (NumberFormatException e) {
// Ada masalah dengan format angka dalam file
System.out.println("Kesalahan format: " + e.getMessage());
}
catch (IndexOutOfBoundsException e) {
// Tidak boleh meletakkan 1000 angka dalam file
System.out.println("Terlalu banyak angka.");
System.out.println("Penulisan dihentikan.");
}
finally {
// Akhiri dengan menutup semua file apapun yang terjadi
try {
data.close(); // Tutup file input
}
catch (IOException e) {
System.out.println("Tidak bisa menutup data.dat");
}
hasil.close(); // Tutup file output
}
}
}
Berikut ini adalah program lengkapnya yang bisa diimport ke dalam Eclipse beserta contoh file data.dat.

Setelah selesai dijalankan file baru akan dibuat hasil.dat yang bisa Anda double-click untuk melihat hasilnya

Nama File, Direktori, dan Kelas File


Topik tentang nama file sebenarnya lebih kompleks daripada yang telah kita bahas. Untuk menunjuk pada sebuah file, kita harus memberikan bukan hanya
nama file, tapi juga nama direktori di mana file tersebut disimpan. Nama file sederhana seperti "data.dat" atau "hasil.dat" diambil dengan mengacu
pada direktori sekarang (current directory, atau juga disebut direktori kerja). Pada program di bagian sebelumnya, hasil.dat disimpan pada direktori yang
sama dengan direktori utama pada proyek balikfile.

File yang tidak diletakkan pada direktori kerja harus diberikan nama "path", atau nama lengkap termasuk nama direktorinya. Untuk memperjelas lagi, ada
dua jenis nama path, yaitu nama path absolut dan nama path relatif. Nama path absolut memiliki informasi lengkap dari akar direktorinya, misalnya
"C:\workspace\balikfile\data.dat". Sedangkan nama path relatif adalah nama file yang dihitung mulai dari direktori aktifnya.

Sayangnya, sintaks untuk nama path dan file bervariasi dari satu sistem ke sistem lain. Misalnya "

 data.dat -- pada komputer apapun, yaitu file data.dat pada direktori aktif.
 /home/lyracc/java/contoh/data.dat -- Nama path absolut pada sistem operasi LINUX atau UNIX. Mengacu pada file bernama data.dat di
direktori yang ditunjuk.
 C:\lyracc\java\contoh\data.dat -- Nama path absolut pada DOS atau Windows
 Hard Drive:java:contoh:data.dat -- Misalnya "Hard Drive" adalah nama dari drivenya, maka ini adalah nama path absolut pada Macintosh OS 9
 contoh/data.dat -- nama path relatif pada LINUX atau UNIX. "contoh" adalah nama direktori yang terdapat pada direktori aktif, dan data.dat
adalah file dalam direktori tersebut. Pada Windows, nama path relatifnya menjadi contoh\data.dat dan pada Macintosh menjadi contoh:data.dat.
Untuk mencegah berbagai masalah yang mungkin muncul karena beragam sistem ini, Java memiliki kelas bernama java.io.File. Objek bertipe
kelas ini melambangkan suatu file. Lebih tepatnya, objek bertipe File melambangkan nama file, bukan file itu sendiri. Nama yang ditunjuk belum tentu
ada. Direktori juga dianggap Java sebagai File, sehingga File juga melambangkan nama direktori sekaligus nama file.
Objek File memiliki konstruktor new File(String) yang akan membuat objek File dari namanya. Nama tersebut bisa nama
sederhana, nama path relatif, atau nama path absolut. Misalnya new File("data.dat") membuat objek File dari file bernama
data.dat di direktori aktif.

Konstruktor lain memiliki konstruktor new File(File,String), di mana parameter pertama adalah direktori di mana file tersebut berada,
dan parameter kedua adalah nama filenya.

Objek File memiliki beberapa metode instansi. Misalnya file adalah variabel bertipe File, berikut ini adalah beberapa metodenya :

 file.exists() -- mengembalikan nilai boolean, yang jika true maka file tersebut ada. Kita bisa menggunakan perintah ini misalnya
untuk mencegah menulis file yang sama ketika kita membuka objek FileWriter baru.
 file.isDirectory() -- mengembalikan nilai boolean yang mengembalikan true jika objek File adalah suatu direktori, dan
false jika File adalah file biasa, atau tidak ada file dengan nama tersebut.
 file.delete() -- menghapus file jika ada
 file.list() -- jika objek File adalah suatu direktori, maka fungsi ini mengembalikan array bertipe String[] yang berisi nama-
nama file pada direktori tersebut. Jika tidak, maka kembaliannya adalah null.
Berikut ini adalah contoh program yang menulis isi file di dalam direktori yang diinput dari user :

package daftardirektori;
 
import java.io.*;
 
public class DaftarDirektori {
 
/* Program ini mengembalikan isi suatu direktori
* User memasukkan direktori yang ingin dilihat
* Jika direktori tidak ada, maka pesan kesalahan
* akan ditulis dan program akan berhenti
*/
 
public static void main(String[] args) {
 
String namaDirektori = null; // Nama direktori dari user
File direktori; // objek File yang mengacu pada direktori
String[] isiFile; // Array berisi file pada direktori
 
// buat objek baru untuk mengambil input
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
 
System.out.print("Masukkan nama direktori : ");
try {
namaDirektori = br.readLine();
} catch(IOException ioe) {
System.out.println("Kesalahan IO terjadi");
System.exit(1);
}
 
direktori = new File(namaDirektori);
 
if (direktori.isDirectory() == false) {
if (direktori.exists() == false)
System.out.println("Tidak ada direktori ini!");
else
System.out.println("Ini bukan direktori.");
}
else {
isiFile = direktori.list();
System.out.println("Files dalam direktori \"" + direktori +
"\":");
for (int i = 0; i < isiFile.length; i++)
System.out.println(" " + isiFile[i]);
}
 
}
 
}
Berikut ini adalah program lengkapnya yang bisa diimport ke dalam Eclipse. Ini adalah hasil keluarannya :

Semua kelas yang digunakan untuk memaca dan menulis data dari dan ke dalam file memiliki konstruktor yang bisa mengambil objek File sebagai
parameternya. Misalnya, jika file adalah variabel bertipe File, dan kita ingin mengambil karakter dari file tersebut, maka kita bisa
membuat FileReader untuk melakukannya dengan menggunakan new FileReader(file).

Mengkopi File
Mengkopi suatu file adalah operasi biasa, dan sistem operasi manapun memiliki perintah atau cara untuk melakukannya. Akan tetapi kita juga bisa membuat
program Java untuk melakukannya.

Karena program harus bisa mengkopi file jenis apapun, kita tidak bisa menganggap data di dalam file adalah data yang bisa dibaca manusia. File lagu atau
video misalnya berisi deretan byte yang merupakan representasi digital dari lagu atau video tersebut.

Oleh karena itu kita harus menggunakan InputStream dan OutputStream untuk melakukan operasi baca tulis yang bisa menangani
data biner, bukan Reader dan Writer yang hanya bisa menangani data yang bisa dibaca manusia.

Program yang kita buat akan mengkopi beberapa byte sekaligus dari InputStream ke OutputStream, akan tetapi kita membutuhkan
tempat sementara di mana data tersebut akan ditempatkan sebelum data tersebut ditulis kembali pada OutputStream. Tempat sementara
tersebut disebut buffer yang merupakan array berukuran tertentu, misalnya 4096 byte (atau 4 kilo byte).

Jika sumber adalah variabel bertipe InputStream, maka byteTerbaca = sumber.read(buffer) akan mengisi


penuh buffer. Metode ini mengembalikan int yang merupakan berapa byte yang efektif diambil oleh sumber, kemudian diletakkan dalam
variabelbyteTerbaca. Jika hasilnya -1, berarti tidak ada lagi data yang bisa diambil dari dalam sumber.

Begitu juga jika kopi adalah keluaran yang bertipe OutputStream maka kopi.write(buffer, 0,


byteTerbaca) menulis deretan byte dari buffer dari posisi 0 hingga byteTerbaca ke aliran keluaran kopi.

Sehingga secara umum perintah-perintah di atas dapat dirangkum menjadi :


byte[] buffer = new byte[4096];
int byteTerbaca;
 
while((byteTerbaca = sumber.read(buffer)) != -1)
kopi.write(buffer, 0, byteTerbaca);
Perintah kopi-file pada sistem operasi baik DOS/Windows atau LINUX/UNIX menggunakan perintah pada konsol yang menambahkan file sumber dan file
tujuannya. Misalnya, pada konsol Windows, kita bisa menggunakan "copy awal.datakhir.dat" untuk mengkopi file awal.dat ke
file bernama akhir.dat.

Tambahan parameter pada konsol ini disebut argumen baris perintah. Argumen baris perintah ini bisa juga digunakan dalam program Java. Dalam Java
argumen baris perintah ini diisi dalam array String[] bernama args, yang kemudian dimasukkan sebagai parameter dalam subrutin main(). Ingat
bagaimana "biasanya" subrutin main() dideklarasikan sebagai public static voidmain(String[] args).

Pada program Java yang sudah dikompilasi, kita bisa memanggilnya dengan " java KopiFile awal.dat akhir.dat" jika
KopiFile adalah nama kelas yang akan kita buat untuk mengkopi file. args[0] akan berisi awal.dat sedangkan args[1] akan
berisi akhir.dat.

Program yang akan kita buat menerima input dari baris perintah. Kemudian program akan mengecek apakah kedua parameter tersebut berisi nama file
dengan benar. Jika salah satu parameternya kosong, maka program akan menampilkan pesan kesalahan. Program juga akan mengecek apakah akhir.dat
merupakan file yang sudah ada sebelumnya, kemudian memberi pertanyaan kepada user apakah isi file ini ingin ditindih dengan isi file awal.dat.
Jika ya, maka operasi akan diteruskan, jika tidak maka program akan dihentikan.

Berikut ini adalah listing lengkap program KopiFile, yang bisa diunduh di sini dan diimport ke dalam Eclipse.

import java.io.*;
 
public class KopiFile {
 
/**
* @param args
*/
public static void main(String[] args) {
// Mengecek apakah argumen program cukup untuk meneruskan program
// Dibutuhkan dua argumen, yaitu sumberFile dan tujuanFile
if (args.length < 2) {
System.out.println("Cara menjalankan program : " +
"java KopiFile sumberFile tujuanFile");
return;
}
 
String sumberNamaFile = args[0];
String tujuanNamaFile = args[1];
 
File sumberFile = new File(sumberNamaFile);
File kopiFile = new File(tujuanNamaFile);
 
// Jika kopi file sudah ada, kita akan tanyakan apakah file tujuan
// akan ditimpa
if (kopiFile.exists()) {
// buat objek baru untuk mengambil input
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String timpaFile = null;
 
System.out.print("Apakah Anda ingin menimpa " + tujuanNamaFile
+ " ? (y/t) ");
try {
timpaFile = br.readLine();
} catch(IOException ioe) {
System.out.println("Kesalahan IO terjadi");
System.exit(1);
}
 
// jika jawabannya tidak, hentikan program
if (timpaFile.equalsIgnoreCase("t"))
return;
}
 
// Di sini kita siap untuk mengkopi file
// Buat aliran input dan output
FileInputStream sumber = null;
try {
sumber = new FileInputStream(sumberFile);
} catch (FileNotFoundException e) {
System.out.println("File sumber tidak ada, berupa direktori " +
"atau tidak bisa dibuka, program dihentikan!");
return;
}
 
FileOutputStream kopi = null;
try {
kopi = new FileOutputStream(tujuanNamaFile);
} catch (FileNotFoundException e) {
System.out.println("File tujuan tidak valid atau tidak bisa
ditulis, " +
"program dihentikan!");
return;
}
 
byte[] buffer = new byte[4096];
int byteTerbaca;
 
try {
while((byteTerbaca = sumber.read(buffer)) != -1)
kopi.write(buffer, 0, byteTerbaca);
} catch (IOException e) {
System.out.println("Ada masalah di tengah pengkopian program");
return;
}
 
System.out.println("Kopi file selesai dijalankan!");
}
 
}
Perlu diingat bahwa program ini tidak bisa dijalankan lewat Eclipse. Jika Anda mencoba menjalankan lewat Eclipse, maka tampilan kesalahan akan muncul,
karena tidak ada parameter yang diberikan.
MEMBUAT FORM BIODATA
MENGGUNAKAN JAVA GUI
public class Biodata extends javax.swing.JFrame {
private ButtonGroup gabung;
/** Creates new form Biodata */
public Biodata() {
super(“Form Biodata by: hauliarifi”);
initComponents();

gabung = new ButtonGroup();


gabung.add(Wanita);
gabung.add(Pria);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>
private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
nama = new javax.swing.JTextField();
hobi = new javax.swing.JTextField();
Pria = new javax.swing.JRadioButton();
Wanita = new javax.swing.JRadioButton();
Agama = new javax.swing.JComboBox();
jLabel6 = new javax.swing.JLabel();
email = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
tlp = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
alamat = new javax.swing.JTextArea();
input = new javax.swing.JButton();
apus = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
data = new javax.swing.JTextArea();
exit = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setFont(new java.awt.Font(“Tahoma”, 1, 12)); // NOI18N
jLabel1.setText(“Tulis Biodata Anda”);
jLabel2.setText(“Nama”);

jLabel3.setText(“Alamat”);

jLabel4.setText(“Jenis Kelamin”);

jLabel5.setText(“Agama”);

nama.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
namaActionPerformed(evt);
}
});
hobi.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hobiActionPerformed(evt);
}
});
Pria.setText(“Pria”);
Pria.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
PriaActionPerformed(evt);
}
});
Wanita.setText(“Wanita”);

Agama.setModel(new javax.swing.DefaultComboBoxModel(new String[] { “Islam”, “Kristen”, “Hindu”, “Budha” }));


jLabel6.setText(“Hobby”);

email.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
emailActionPerformed(evt);
}
});
jLabel7.setText(“Email”);

jLabel8.setText(“No. Telp”);

tlp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tlpActionPerformed(evt);
}
});
alamat.setColumns(20);
alamat.setRows(5);
jScrollPane1.setViewportView(alamat);

input.setText(“Input”);
input.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
inputActionPerformed(evt);
}
});
apus.setText(“Reset”);
apus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
apusActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE,
90,javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE,
122,javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 88, Short.MAX_VALUE)
.addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel8, javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Agama, javax.swing.GroupLayout.PREFERRED_SIZE, 81,javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(Pria)
.addGap(48, 48, 48)
.addComponent(Wanita))
.addComponent(hobi, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)
.addComponent(email, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)
.addComponent(tlp, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)
.addComponent(nama, javax.swing.GroupLayout.PREFERRED_SIZE, 192,javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(apus)
.addGap(18, 18, 18)
.addComponent(input)))))
.addGap(31, 31, 31))))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE,
27,javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(nama, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, javax.s
wing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Pria)
.addComponent(Wanita)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Agama, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, javax.
swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(hobi, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, javax.sw
ing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel6))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(email, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, javax.s
wing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(tlp, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swin
g.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(input)
.addComponent(apus))
.addContainerGap(12, Short.MAX_VALUE))
);
data.setColumns(20);
data.setRows(5);
jScrollPane2.setViewportView(data);

exit.setText(“Exit”);
exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
.addComponent(exit))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(54, 54, 54)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE,
255,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(exit)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
332,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE, javax
.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE, java
x.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE, java
x.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
pack();
}// </editor-fold>
private void namaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void hobiActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void PriaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void emailActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void tlpActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
boolean validasi;

private void inputActionPerformed(java.awt.event.ActionEvent evt) {


valid();

String jk=””,agama;
if(Pria.isSelected()){
jk=”laki-laki”;}
else if(Wanita.isSelected()){
jk=”Perempuan”;}
agama = Agama.getSelectedItem().toString();

data.setText(“Nama : ” + nama.getText()
+”\n” +”Jenis Kelamin : ” + jk
+”\n” + “Agama : ” + agama
+”\n” + “Hobby : ” + hobi.getText()
+”\n” + “Email : ” + email.getText()
+”\n” + “No. Telp : ” + tlp.getText()
+”\n” + “Alamat : ” + alamat.getText());
}

private boolean valid(){


validasi = true;
if (nama.getText().isEmpty() && email.getText().isEmpty() && tlp.getText().isEmpty()
&& alamat.getText().isEmpty() ){
JOptionPane.showMessageDialog(null,”Data tidak boleh ada yang kosong”);
data.setText(null);}
return validasi;
}

private void apusActionPerformed(java.awt.event.ActionEvent evt) {


Agama.setSelectedItem(null);
nama.setText(null);
hobi.setText(null);
email.setText(null);
tlp.setText(null);
alamat.setText(null);
}
private void exitActionPerformed(java.awt.event.ActionEvent evt) {
int psn1 = JOptionPane.showConfirmDialog(null,”Anda yakin untuk keluar dari aplikasi?”);
if (psn1==JOptionPane.OK_OPTION){
System.exit(1);
}else {}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate=”collapsed” desc=” Look and feel setting code (optional) “>
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details seehttp://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :javax.swing.UIManager.getInstalledLookAndFeels()) {
if (“Nimbus”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Biodata.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Biodata.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Biodata.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Biodata.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Biodata().setVisible(true);
}
});
}
// Variables declaration – do not modify
private javax.swing.JComboBox Agama;
private javax.swing.JRadioButton Pria;
private javax.swing.JRadioButton Wanita;
private javax.swing.JTextArea alamat;
private javax.swing.JButton apus;
private javax.swing.JTextArea data;
private javax.swing.JTextField email;
private javax.swing.JButton exit;
private javax.swing.JTextField hobi;
private javax.swing.JButton input;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextField nama;
private javax.swing.JTextField tlp;
// End of variables declaration
}

Anda mungkin juga menyukai