Dalam java, objek dari mana kita dapat membaca barisan byte data seperti misalnya
keyboard atau file disebut InputStream, sedang objek kemana kita dapat mengirim barisan byte
data misalnya layar atau file disebut sebagai OutputStream. Cukup tersedia pustaka untuk
input/output yang terkoleksi dalam package java.io seperti ringkasan berikut ini :
class java.io.InputStream
class java.io.ByteArrayInputStream
class java.io.FileInputStream
class java.io.FilterInputStream
class java.io.BufferedInputStream
class java.io.DataInputStream (implements java.io.DataInput)
class java.io.LineNumberInputStream
class java.io.PushbackInputStream
class java.io.PipedInputStream
class java.io.SequenceInputStream
class java.io.StringBufferInputStream
class java.io.OutputStream
class java.io.ByteArrayOutputStream
class java.io.FileOutputStream
58 Modul Praktikum Pemrograman Antar Muka Grafis
class java.io.FilterOutputStream
class java.io.BufferedOutputStream
class java.io.DataOutputStream (implements java.io.DataOutput)
class java.io.PrintStream
class java.io.PipedOutputStream
Constructor File :
File(String) : membuat objek file
File(String, String) :membuat objek file dengan directori tertentu
File(File, String) : membuat objek File dingen direktori tertentu
Jika dilihat output untuk f2.list() adalah :[L java.lang.String;@190d11. Ini merupakan
address memory dimana array string dari nama-nama file yang merupakan isi direktori tersebut.
Jika diinginkan mencetak nama-nama file isi direktori tersebut dapat digunakan
pemanggilan method list() yang mengembalikan array of string dari nama-nama file. Berikut ini
contohnya.
Program 5.2 Program berikut merupakan project membaca isi direktori. Direktori diinput
menggunakan TextField. Jika direktori maka akan ditampilkan isinya
menggunakan TextArea. Adapun kode dalam tombol Check adalah seperti berikut
ini :
import java.io.IOException;
public class JavaApplication35 {
public static void main(String[] args) {
int n=0;
try {n=System.in.read();} catch(IOException e){};
System.out.println("Hasil dibaca :"+n+"="+(char)n);
byte[] b=new byte[5];
try {System.in.read(b);} catch(IOException e){};
for(int i=0;i<b.length;i++)
System.out.println("b["+i+"]="+(char)b[i]);
byte[] c=new byte[10];
try {System.in.skip(3);} catch(IOException e){};
try {System.in.read(c,1,4);} catch(IOException e){};
for(int i=0;i<c.length;i++)
System.out.println("c["+i+"]="+(char)c[i]);
}
}
Penjelasan program
class FileInputStream menangani mahasiswaan data dari suatu file. Hampir sama
dengan mahasiswaan data dari keyboard, class ini juga dapat menggunakan tiga cara
mahasiswaan, yaitu : read(), read(b), dan read(b,off,len). Berikut ini contoh membaca file teks
dengan nama file : coba.txt yang ada pada direktori : d:/java/tes. Adapun isi file tersebut adalah
seperti gambar 5.4 berikut, yang merupakan file berukuran 88 byte.
Siapkan proyek dengan Form seperti gambar 5.5 berikut, yang berisi label, TextField untuk
menangkap nama file, TextArea untuk menampilkan isi file dan Button untuk command Baca.
try {
f1 = new FileInputStream(namaF);
int size;
size = f1.available();
ta.append("Available bytes :"+size+"\n");
ta.append("First 1/4 file read(): \n");
String s="";
for(int i=0; i<size/4;i++)s+=(char) f1.read();
ta.append(s);
ta.append("\n");
ta.append("Total byte available: "+f1.available()+"\n");
byte[] b=new byte[f1.available()/3];
ta.append("Membaca 1/3 dari sisa: "+f1.available()/3+"\n");
if(f1.read(b)!=b.length)
ta.append("ada yang salah..");
ta.append("Hasil : " );
String s1="";
for(int i=0; i<b.length;i++)s1+=(char) b[i];
ta.append(s1);
ta.append(" SELESAI");
f1.close();
} catch (IOException ex) { }
}
Hasil program : Mula-mula membaca seperempat isi file menggunakan f1.read() kemudian
menampilkan ke TextArea. Selanjutnya membuat array byte ukuran sepertiga dari sisanya, yaitu
array b. Kemudian membaca 1/3 sisa byte menggunakan f1/.read(b), dan menampilkan hasil
bacaannya ke TextArea.
java.lang.Object
|
+----java.io.OutputStream
public class OutputStream extends Object
BAB V : IO, File dan Stream 63
Program ini ditulis dalam model non GUI untuk melihat efek langsung pada hasil file yang dibuat
pada folder src.
package pkg5.pkg5.tuliskefilenongui;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class TulisKeFIleNonGUI {
public static void main(String[] args) throws Exception {
byte buf[]=getInput();
OutputStream f1=new FileOutputStream("file1.txt");
OutputStream f2=new FileOutputStream("file2.txt");
OutputStream f3=new FileOutputStream("file3.txt");
for(int i=0;i<12;i++)
f1.write(buf[i]);
f1.close();
f2.write(buf); f2.close();
f3.write(buf,12/4,12/2); f3.close();
64 Modul Praktikum Pemrograman Antar Muka Grafis
Hasil keluaran progam adalah seperti gambar 5.7 dan 5.8. Diinputkan 13 karakter berbunyi AKU
SUKA KAMU yang dibaca oleh getInput() yang hanya membaca 12 karakter. Selanjutnya ditulis ke
dalam 3 buah file berturut-turut file1.txt, file2.txt dan file3.txt dalam folder src (default folder).:
Adapun isi file file1.txt dan file2.txt adalah sama yaitu : AKU SUKA KAM (hanya 12 karakter). Isi
file file3.txt adalah karakter ke-3 sebanyak 6 karakter, yaitu :” SUKA “
Berikut ini adalah class untuk membaca dari file secara terbuffer :
java.lang.Object
|
+----java.io.InputStream
|
+----java.io.FilterInputStream
|
+----java.io.BufferedInputStream
BAB V : IO, File dan Stream 65
Class FilterInputStream merupakan class abstract yang menjadi induk beberapa model
input stream antara lain BufferedInputStream.
Class BufferedInputStream membaca dari file menggunakan buffer yang dapat diatur
ukurannya ketika objek buffer dibuat. Berikut ini contoh program membaca suatu file “e:/Coba.doc”
yang berukuran 1.269.760 byte menggunakan buffer dengan ukuran 1024 byte (1KB), 10240
(10KB) dan 40960 (40KB). Perbandingan dengan membaca tidak terbuffer dilakukan dengan
menghitung perbedan waktu dalam mahasiswaan.
import java.io.*;
class BufInput
{ public static void main(String[] arg) throws Exception
{String nmFile=”e:/Coba.doc”); int ukuranBuf=1024;
FileInputStream fis=new FileInputStream("doc10.doc");
BufferedInputStream bis=new BufferedInputStream(fis,ukuranBuf);
Pada gambar 5.9 terlihat bahwa untuk membaca suatu file yang sama dengan ukuran
yang sama, jika ukuran buffer dinaikkan maka proses pembacaan akan lebih cepat. Sedangkan
menggunakan buffer untuk membaca akan sedikit memperlambat proses membaca file.
Pada proses tulis ke file tanpa buffer penulisan dilakukan ke file secara langsung ke disk
oleh program, sedangkan dengan menggunakan buffer penulisan dilakukan pada buffer dan
secara otomatis jika buffer penuh penulisan ke disk baru dilakukan oleh java. Berikut ini contoh
projek GUI untuk menulis ke file dengan dan tanpa buffer.
Projek didesain untuk menulis file pada dua cara, dengan buffer (File1.txt) dan tanpa Buffer
(File2.txt) seperti terlihat dalam Gambar 5.10. Teks yang ditulis adalah 500 kali menulis teks, yaitu
“nulis#0” sampai dengan “nulis#499”. Pada awal deklarasi pacakge sertakan :
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
FileOutputStream fos;
BufferedOutputStream bos;
FileOutputStream fos_nb;
int ukuran=1024;
byte[] b;
long t0,t1,t2,t3;
Selanjutnya untuk TextField penulisan waktu kita ubah nama variabelnya menjadi Time1 untuk
pewaktu menulis dengan buffer dan Time2 untuk pewaktu menulis tanpa buffer. Selanjutnya dalam
button Tulis ke File kita definisikan kode sebagai berikut :
try {
fos=new FileOutputStream(jTextField1.getText() );
bos=new BufferedOutputStream(fos,1024);
t0=System.currentTimeMillis();
try {
for(int i=0;i<500;i++)
{String teks="nulis#"+new Integer(i).toString()+"\n";
b=teks.getBytes();
bos.write(b);
BAB V : IO, File dan Stream 67
}
bos.flush();
bos.close();
} catch (IOException ex) {}
long t1=System.currentTimeMillis();
Time1.setText( new Long(t1-t0).toString());
Hasil program :
Terlihat dari hasil program bahwa menulis dengan buffer akan memerlukan waktu yang lebih
singkat dibandingkan dengan menulis langsung ke file tanpa buffer.
DataInputStream :
+----java.io.InputStream
|
+----java.io.FilterInputStream
|
+----java.io.DataInputStream
DataOutputStream :
Berikut ini adalah contoh projek untuk menulis file bertipe dan membacanya kembali. Desain GUI
seperti pada gambar 10.9. Berikut ini komponen yang ada dalam projek :
Tombol Simpan adalah button untuk membaca nama (String), umur (int) dan gaji (float) dan
kemudian menyimpannya dalam file secara bertype. Sedangkan tombol Baca digunakan untuk
membaca file kembali secara bertype dan menampilkannya dalam TextArea. Tombol Hapus untuk
membersihkan teks dalam panel Tulis Data atau Baca Data.
new FileInputStream("dataHarian.dat")));
} catch (FileNotFoundException ex) {}
try {
String nama=dis.readUTF();
int umur=dis.readInt();
float gaji=dis.readFloat();
taHasil.append("Halo "+nama+"\n");
taHasil.append("Kau lahir tahun "+ new Integer(2013-
umur).toString()+" kan ?\n");
taHasil.append("Gajimu + bonus 10% adalah Rp. "+new
Float(gaji*1.1).toString());
} catch (IOException ex) {}
}
2. Buat projek GUI untuk mengkopy file dengan menginputkan nama file asal dan nama file
tujuan dalam command line sebagai parameter dalam command lain. Namakan file
programnya kopi.java. Hasil eksekusi contohnya adalah (copy FileKu.txt ke FileMu.txt ) :
BAB V : IO, File dan Stream 71
3. Buat program untuk membaca file teks dan menampilkannya dalam bentuk lowercase dari isi
file teks yang berbentuk uppercase, seperti contoh berikut. Misalkan isi file adalah
:”YOGYAKARTA BERHATI NYAMAN”, maka hasil tampilannya adalah :