I/O,
File, dan Stream Byte
A.
Data
dan File
1.
Data
Data merupakan representasi nilai yang mengisi satu segmen
memory(1 segmen memory = 1 byte = 8 bit).Karena 1 segmen memory tersusun atas 8
bit, maka nilai positif yang mungkin dimiliki adalah 0-(28-1) atau
setara dengan 0 – 255d. Nilai ini kemudian digunakan untuk mengkodekan satu
karakter (numerik 0-9, abjad kapital A-Z, tanda baca, operator aritmatika dan
sebagainya).
2.
File
File adalah wadah yang menyusun data menjadi satu
entititas kesatuan. Data dalam file disusun sebagi satu entititas kesatuan yang
terurut. Terurut disini berarti tiap-tiap byte tersebut diletakan dalam posisi
sedemikian rupa, sehingga sesuai dengan urutan proses penyusunannya yaitu satu byte setelah byte yang lain.
Jenis-jenis
File :
·
File
Biner(Hex File)
Adalah file yang hanya dapat diartikan sebagai nilai
numerik untuk setiap byte datanya (0-255d), tanpa harus diterjemahkan terlebih
dahul menjadi kode ASCII/EBCDEDIC/Unicode. File ini disebut juga sebagai File
Hexadesimal (Hex File) karena nilai numerik data tersebut sering juga
direpresentasikandalam sistem bilangan hexadesimal (0-FFh).
·
File
Text
Adalah file yang hanya dapat diartikan dalam bentuk
“Terjemahan” dari setiap nilai numerik
byte ke dalam kode ACII/EBCDIC/Unicode. Kita dapat melihat isi/informasi
dari file tersebut dengan menggunakan text editor biasa (Dos Editor, Notepad,
Wordpad, MS Word dan sebagainya).
B.
Membaca
dan Menulis File
Membaca
dan menulis file ada 5 langkah :
1. Membuat
objek file dari kelas file
Bentuk
umumya adalah
File
finput = new File (“masukan.dat”);
File
finput = new File (“c:\latihan\masukan.dat”);
File
foutput = new File (“keluaran.dat”);
File
foutput = new File (“c:\latihan\keluaran.dat”);
2. Mengasosiasikan
objek file tersebut dengan objek steam
Kita
dapat juga menggunakan file yang tersimpan sebagai input dan output. Kita dapat
menggunakan :
·
FileInputStream è untuk input
·
FileOutputStream èuntuk output
Dapat
juga menggunakan stream byte sebagai tipe data primitif :
·
DataInputStream
·
DataOutputStream
3. Memasukan
objek stream ke buffer
Buffer
sebagai penampung sejumlah chunk data yang telah dibaca oleh program dari suatu
file input tau sebaliknya.
Dengan
buffer mekanisme baca tulis data dapat lebih efisien, karena tidak perlu bolak
balik ke objek stream untuk mengambil data
BufferedInputStream bufIn = new
BufferedInputStream (fis);
BufferedInputStream bufOut =
new BufferedOutputStream (fos);
4. Membaca
atau mengirimkan data ke objek steam atau buffer
Objek
stream merupakan representasi dari file input/output. Pertama membuat objek
stream baru kita bisa membaca dan menulis data dengan method yang tersedia pada
kelas stream bersangkutan.
Contoh
:
int
dataMasukan = fis.read();
fos.write(dataMasukan);
bila
menggunakan buffer :
int
dataMasukan = bufin.read();
bufOut.write(dataKeluaran);
5. Menutup
objek stream atau buffer dan objek file
Setelah
proses membaca dan menulis selesai, stream yang kita buat harus di tutup.
Contoh
:
fis.close();
fos.close();
Method
untuk menutup buffer :
bufIn.close();
bufOut.close();
Method
untuk menutup objek file :
fileIn.close();
fileOut.close();
C.
Stream
Stream merupakan dasar operasi input-output ( I/O )
dalam Java yang menggunakan package java.io sebagai package utama. Stream adalah
representasi abstrak dari input dan output device, dimana aliran bytes akan
ditransfer seperti file dalam harddisk, file pada sistem remote atau printer.
Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard
atau komputer remote. Sedangkan untuk operasi penulisan berarti menulis data
pada output stream.
Stream
juga bisa dibedakan berdasarkan jenis data yang dialirkan pada stream, stream
karakter dan stream byte. Stream byte digunakan untuk mengalirkan data byte (8
bit). Adapun stream karakter digunakan untuk mengalirkan data 16 bit.
Class-class untuk fungsi I/O berada dalam
package java.io. Class dasar InputStream dan OutputStream merupakan
abstract-class, dari mana diturunan semua class-class spesifik lainnya. Dengan
demikian, dalam Java kita dapat menangani semua aliran data (stream) dengan
cara seragam. Karena bersumber dari satu superclass, maka metode yang
dipakaipun seragam.
Class
dasar lainnya, Reader dan Writer merupakn dasar bagi fungsi-fungsi karakter
(char) I/O. Class ini mendukung pemakaian karakter Unicode. Kedua class ini
juga merupakan superclass bagi banyak class-class spesifik lainnya.
Berikut adalah hirarki dari class-class dalam
package java.io.
ü InputStream dan Output Stream
InputStream
|
OutputStream
|
·
FilterInputStream
o
BufferedInputStream
o
DataInputStream
o
LineNumberInputStream
o
PushbackInputStream
·
ByteArrayInputStream
·
FileInputStream
·
ObjectInputStream
·
PipedInputStream
·
SequenceInputStream
·
StringBufferInputStream
|
·
FilterOutputStream
o
BufferedOutputStream
o
DataOutputStream
o
PrintStream
·
ByteArrayOutputStream
·
FileOutputStream
·
ObjectOutputStream
·
PipedOutputStream
|
ü Reader
dan Writer
Reader
|
Writer
|
·
BufferedReader
o LineNumberReader
·
CharArrayReader
·
FilterReader
o PushbackReader
·
InputStreamReader
o
FileReader
·
PipedReader
·
StringReader
|
·
BufferedWriter
·
CharArrayWriter
·
FilterWriter
·
OutputStreamWriter
o
FileWriter
·
PipedWriter
·
StringWriter
·
PrintWriter
|
ü Class-class
File, Object I/O dan lainnya
·
File
·
RandomAccesFile
·
FileDescriptor
·
FilePermission
·
ObjectStreamClass
·
ObjectStreamField
·
SerializablePermission
·
StreamTokenizer
D.
Stream
Byte
Nama
Kelas
|
Keterangan
|
BufferedInputStream
|
Stream
input yang telah ter-buffer
|
BufferedOutputtStream
|
Stream
output yang telah ter-buffer
|
ByteArrayInputStream
|
Stream
input yang membaca dari array byte
|
ByteArrayOutputStream
|
Stream
output yang membaca ke array byte
|
DataInputStream
|
Stream
input yang berisi method-method untuk membaca tipe data standar yang terdapat
dalam Java
|
DataOutputStream
|
Stream
output yang berisi method-method untuk menuliskan tipe data standar yang
terdapat dalam Java
|
FileInputStream
|
Stream
input yang membaca dari sebuah file
|
FileOutputStream
|
Stream
output yang menulis ke sebuah file
|
FilterInputStream
|
Mengimplementasikan
InputStream
|
FilterOutputStream
|
Mengimplementasikan
OutputStream
|
InputStream
|
Kelas
abstrak yang menjelaskan stream input
|
OutputStream
|
Kelas
abstrak yang menjelaskan stream output
|
PipedInputStream
|
Penyalur
input
|
PipedOutputStream
|
Penyalur
output
|
PrintStream
|
Stream
output yang berisi method println() dan print()
|
Didefinisikan menggunakan dua buah
hirarki kelas InputStream dan OutputStream yang merupakan kelas abstrak.
Kelas yang termasuk dalam kategori
stream byte :
1.
InputStream
Subclass-subclass dari
inputStream adalah : AudioInputStream, ByteArrayInputStream, FileInputStream,
FilterInputStream, PipedInputStream, SequenceInputStream, dan
StringBufferInputStream. Dua method utama dari InputStream adalah :
·
Read
Method
ini digunakan untuk membaca stream.
·
Close
Method ini digunakan untuk menutup
koneksi input stream.
import java.io.*;
class InputStream {
public static void main(String[] args) throws IOException {
byte[] data = new byte[10];
System.out.print("Ketik 10 buah
karakter :");
System.in.read(data); //input stream
System.out.print("Karakter yang Anda
ketik yaitu : ");
for(int i=0;i<data.length;i++) {
System.out.println((char)data[i]); }
}
}
2. Output
Stream
Subclass-subclass dari
outputStream adalah :
·
ByteArrayOutputStream : digunakan
untuk menuliskan stream menjadi byte array.
·
FileOutputStream : digunakan untuk
menulis pada file
·
FilterOutputStream : merupakan
superclass dari subclass-subclass seperti DataOutputStream, BufferOutputStream,
PrintStream, CheckedOutputStream.
·
ObjectOutputStream : digunakan
untuk menuliskan objek pada OutputStream.
·
PipedOutputStream : digunakan
untuk menjadi output dari PipedInputStream.
Sebagian method-method OutputStream adalah :
·
Voidclose()
Menutup output stream yang
aktif dan melepaskan sumber daya terkait dengan stream tersebut.
·
Void flush()
Melakukan flush output
stream dan memaksa semua byte buffer untuk dituliskan keluar.
·
Void write(byte[] b)
Menulis sebanyak b.length
dari byte array ke output stream
·
Void write(byte[] b, int off, int
len
Menuliskan sebanyak len byte
dari byte array b dimulai dari index off
import java.io.*;
class OutputStream {
public
static void main(String[] args) throws IOException {
byte[]
data = {'a','b','c','d','e','f','g'};
System.out.write(data,3,4);
//output stream
System.out.write('\n');
//pindah baris
System.out.write(data); //tulis semua isi
array data
}
}
Output
:
E.
File Stream
1. Class
File
Class
File merupakan representasi dari file dan direktori (path). Constructornya :
File(String pathname)
|
à
|
membuat
file dalam direktori tertentu, nama file tertentu.
|
File(String parent, String child)
File(File parent, String child)
|
à
|
Membuat file dengan posisirelatif terhadap
direktori parent. Direktori relative parent dapat berupa string ataupun
direktori dari sebuah file. Child menyatakan sub-direktori atau nama file
yang terletak relative terhadap parent
|
File(URI
uri)
|
à
|
Merupakan objek URI (Uniform Resource
Identifier). Misalnya, file:///
D:\JAVA\Gui1.HTML. bentuk URI merupakan spesifik platform.
|
Konstruktor
File :
File(String, String) :membuat objek file dengan directori
tertentu
Beberapa method penting yang tersedia :
canRead() : boolean ,
menentukan apakah file dapat dibaca/tidak
canWrite() :boolean , menentukan
apakah file dapat dutulis /tidak
delete() : boolean menentukan apakah file dapat
dihapus/tidak
exists() : boolean, menentukan apakah suatu file ada
/tidak
getName() : memberikan nama file
isDirectory() : Mengembalikan indikasi Boolean yaitu bukan
sebuah file yang sudah ada. .
isFile() : Mengembalikan indikasi
Boolean yaitu bukan sebuah file normal yang sudah ada.
lastModified() : Mengembalikan
waktu modifikasi yang terakhir.
length() : Mengembalikan panjang
file.
list() : Me-Lists file-files dalam
sebuah direktori.
list(FilenameFilter)
: menggunakan filter spesifik untuk me-list file-file ke dalam sebuah
direktori.
mkdir() : Membuat sebuah direktori
dan megembalikan suatu Boolean indikasi pembuatannya sukses.
mkdirs() : Membuat semua direktori
dalam path itu.
renameTo(File)
: Memeberikan nama ulang file dan
mengembalikan suatu Boolean mengindikasi atau tidak method sukses. whether or not this method was successful.
import
java.io.*;
class
classfile{
public static void cetak(String s){
System.out.println(s);}
public static void main(String[] ar){
String direk1="d:/Semester
2/Pemrograman 2/Stream kelompok/print";
String
direk2=("d:/Semester 2/Pemrograman 2/Stream kelompok/kiky");
File f1=new File(direk1);
File f2=new File(direk2);
File f3=new File("c:/Semester
2");
cetak("Objek f1 adalah :"+f1);
cetak("Objek f1 adalah :"+f2);
cetak("f1.isDirectory():"+f1.isDirectory());
cetak("f2.isDirectory():"+f2.isDirectory());
cetak("f2.list() :"+f2.list());
cetak("canRead() :"+f1.canRead());
cetak("canRead() :"+f2.canRead());
cetak("f2.exists():"+f2.exists());
f2.renameTo(f3);
cetak("f2.exists():"+f2.exists());
}
}
Output
:
2. FileInputStream
class FileInputStream
menangani pembacaan data dari suatu file.
file :d:/semester 2/coba.java (berukuran 108 byte)
class
coba{
public static void main(String[] arg){
System.out.println("HELO
SELAMAT PAGI");
}
}
import
java.io.*;
import
java.util.*;
Membaca file dari file coba.java
|
public static void main(String[] arg)
throws Exception {
InputStream f1=new
FileInputStream("d:/semester 2/coba.java");
size=f1.available();
System.out.println("Available bytes :"+size);
System.out.println("First 1/4 file read(): ");
for(int i=0; i<size/4;i++)
System.out.print((char) f1.read());
System.out.println("");
System.out.println("Total byte available:
"+f1.available());
byte[] b=new byte[f1.available()/3];
System.out.println("Membaca 1/3 dari
sisa: "+f1.available()/3);
if(f1.read(b)!=b.length)//membaca file
System.err.println("ada yang
salah..");
System.out.println("Hasil
: " );
for(int
i=0; i<b.length;i++)
System.out.print((char) b[i]);
output Stream, menutup
|
}
}
Output :
3.
FileOutputStream
Merupakan kebalikan dari
FileInputStream. Objek dari kelas FileOutputStream akan mengirimkan data-data
program ke file output.
Instansiasi objek stream
dengan menggunakan konstruktor:
FileOutputStream file2 = new
FileOutputStream(String)
|
Argumen dari string ini sama
seperti pada FilrInputStream. Bisa berupa nama file atau path dan nama file
output.Digunakan method write(int data) untuk menulis data ke file.Setelah
selesai, gunakan close() untuk menutup stream.
/*
*
Program Demo FileOutputStream
*/
package tugasjavaindividu2;
import java.io.FileOutputStream;
import java.io.IOException;
/**
*
*
@author Tikanosa
*/
public class Main {
FileOutputStream foutput=null;
String data="Nama saya KAMI. Namamu siapa?";
//membuka file
try{
foutput = new
FileOutputStream("d:/Output.txt");
}catch(IOException e){}
//menulis data kedalam file à File output
stream
try{
for(int
i=0;i<data.length();i++){
foutput.write((char)
data.charAt(i));
}
}catch(IOException e){}
try{
foutput.close();
}catch(IOException e){}
}
}
Output:
Isi File
pada Output.txt adalah
F. Print Stream
Proses pembacaan dan penulisan
stream byte pada dasarnya merupakan proses membaca dan menulis data biner. Bila
stream data tersebut disimpan ke dalam file, maka file itu akan berformat biner
pula (hex file). Kita tidak dapat melihat isi data yang sebenarnya dengan
menggunakan text editor biasa(dos editor, notepad, wordpad, atau MS Word)
karena tool-tool itu akan menerjemahkan format data biner ke dalam bentuk
karakter ASCII.
Agar stream byte dapat disimpan dalam
bentuk nilai, maka kita harus menggunakan salah satu dari jenis kelas print,
yakni PrintStream dan PrintWriter
a.
Kelas PrintStream
Konstruktor:
1.
PrintStream(OutputStream
out)
2.
PrintStream(OutputStream
out, boolean autoFlush)
3.
PrintStream(OutputStream
out, boolean autoFlush, String encoding).
import java.io.FileNotFoundException;
import
java.io.PrintStream;
import
java.util.Scanner;
public class
printstream {
public static void main(String[] args) throws
FileNotFoundException{
//membaca dan menulis file
String npm = new String("");
String nama = new String("");
double ipk;
PrintStream
diskWriter = new PrintStream("d:/mhs.txt"); //menyatakan
print stream
int i;
Scanner sc = new Scanner(System.in);
System.out.print("Jumlah data = ");
i = sc.nextInt();
do{
System.out.print("\nNIM =
");
npm = sc.next();
System.out.print("Nama =
");
nama = sc.next();
System.out.print("IPK =
");
ipk = sc.nextDouble();
diskWriter.println(npm + "
" + nama + " " + ipk);
i--;
}while(i>0);
System.out.println("Isi File:");
//bentuk
penulisanna/cetakannya seperti ini
while
(diskScanner.hasNext()){
npm = diskScanner.next();
nama = diskScanner.next();
ipk = diskScanner.nextDouble();
System.out.println("["
+ npm + "] " + nama + " (" + ipk + ")");
}
}
}
Output Program:
Isi File yang ada pada mhs.txt sekarang adalah sama dengan isi
file/output dari masukan kita.
b.
Kelas PrintWriter
Ø Konstruktor:
1.
PrintWriter(OutputStream
out)
2.
PrintWriter(OutputStream
out, boolean autoFlush)
3.
PrintWriter(Writer out)
4.
PrintWriter(Writer out,
boolean autoFush)
Ø
Contoh Program :
import
java.io.*;
public
class PrintWriterKiky {
public static void main(String[]args){
//mendeklarasikan print
stream
PrintWriter pw = null;
File fileTemp = new
File("d:/printwriter.txt");
if(fileTemp.exists()){
System.out.println("File
ini sudah ada! \n" + "Hapuslah terlebih dahulu " + "dan
jalankan kembali.");
System.exit(0);
}
//menulis data
try{
//membuat
stream output untuk fileTemp
pw= new
PrintWriter(new FileOutputStream(fileTemp), true);
for(int i=0;
i<10; i++)
pw.print((int)(Math.random()*1000)+"
");
}
catch(IOException ex){
System.out.println(ex.getMessage());
finally{
//Menutup
File
if(pw !=
null) pw.close();
}
}
}
Ø Output pada Run
Ø Output pada file prinwriter.txt
G.
Buffered Stream
Class BufferedInputStream dan class BufferedOutputStream bertujuan untuk
melakukan buffering (penyanggaan data) sebelum proses baca dari file atau tulis
ke file.
Pada proses tulis
ke file tanpa buffer penulisan dilakukan ke file secara fisik oleh program ,
sedangkan dengan menggunakan buffer penulisan dilakukan pada buffer dan secara
otomatis jika buffer penuh penulisan ke file akan dilakukan oleh java.
import
java.io.*;
class Bufio
{ public static
void main(String[] arg) throws Exception
{FileOutputStream fos=new FileOutputStream("TesBuf.txt");
BufferedOutputStream bos=new
BufferedOutputStream(fos,1024);
byte[] b=new byte[10];
long t0=System.currentTimeMillis();
for(int i=0;i<500;i++)
{
("nulis#"+i).getBytes(0,10,b,0);
bos.write(b);
}
bos.flush();
bos.close();
long t1=System.currentTimeMillis();
System.out.println("Dengan Buffer,
waktu: "+ (t1-t0));
FileOutputStream fos_nb=new
FileOutputStream("TesBuf2.txt");
long t2=System.currentTimeMillis();
for(int i=0;i<500;i++)
{
("nulis#"+i).getBytes(0,10,b,0);
fos_nb.write(b);
}
fos_nb.flush(); //output stream
fos_nb.close();
long t3=System.currentTimeMillis();
System.out.println("Tanpa Buffer,
waktu: "+ (t3-t2)); }}
Output
H.
Program Utama
Program Utama
Ø
Syntaks
Program
/*
*
Program Demo All
*/
package tugasjavaindividu5;
import java.io.*;
/**
*
*
@author Tikanosa
*/
public class Main {
public static void main(String[] args) {
try{
//input
FileInputStream fis = new
FileInputStream("d:\\buffer1.txt"); //file
input stream
//ouput
FileOutputStream fos = new
FileOutputStream("d:/buffer2.txt");
//file output stream
BufferedOutputStream bos = new
BufferedOutputStream(fos); //buffer output stream
//penggunaan printstream
PrintStream ps = new
PrintStream(bos);
ps.println("Backup file
buffer1.txt");
//Baca/tulis
file per byte melalui buffered stream
int code = 0;
while(code != -1){
if((code = bis.read()) != -1)
ps.print((char)
code);
}
//tutup
stream
bis.close();
ps.close();
}
catch (FileNotFoundException fe) { fe.printStackTrace();}
catch (IOException ie) { ie.printStackTrace();}
}
}
Output pada file buffer2.txt:
DAFTAR PUSTAKA
Wijono, Matius
Soesilo dkk. Java 2 SE dengan JBuilder.
Penerbit ANDI. Yogyakarta, 2004.
Fikri, Rijalul dkk. Pemrograman
Java. Penerbit ANDI. Yogyakarta, 2005
Campione, Mary.Walrath, Kathy. The Java Tutorial. Sun, Nov 2003.
Wutha, Mark. Java
Expert Solution
Eckel, Bruce. Thinking
in Java. Prentice-Hall PTR, 1998.
Eckel, Bruce. Java
Code Convention. Prentice-Hall PTR, 1998.
Mike Cohn. Teacher
Your Self Café 2 in 21 Days. Sams.net Publishing 1997
No comments:
Post a Comment