i/o streams - dewapurnama

advertisement
I/O S TREAMS
TOPIK
Overview I/O Streams
 Byte stream & Character Stream
 Hirarki class pada package java.io
 Read & write streams

~
~
~
InputStream & OutputStream
Reader & Writer
RandomAccessFile
Memfilter
M
filt stream t
 Membaca input melalui keyboard

S TREAM I/O



Semua data di Java dibaca dan ditulis dengan
g
menggunakan stream.
Stream adalah representasi abstrak dari aliran
data yang berjalan
data yang berjalan dari sumber (input stream) ke
(input stream) ke
tujuan (output stream).
Contoh:
~
~
~
Membaca dan menulis file di dan ke harddisk
Memcaca dan menulis teks ke console.
M b
Membaca
d menulis
dan
li melalui
l l i network
t
k
I/O S TREAMS

Untuk membaca, program membuka stream pada sumber ( file, memory, socket) dan membaca informasi secara sekuensial. 
Untuk menulis, program mengirim informasi ke tujuan dengan cara
membuka stream tujuan, selanjutnya menulis informasi secara
sekuensial.
S TREAM

Byte stream (8 bit)
Byte stream (8 bit)
digunakan untuk byte, integer, dan simple yp y g
data type yang lain.
Misal: numerical data, executable programs, dll

Character stream (16bit)
digunakan untuk data tekstual (teks), mendukung unicode.
Misal: text files
B YTE S TREAM
C HARACTER S TREAM
K ARAKTER E NKODING

OS menggunakan beberapa tipe skema pengkodingan berbeda dalam menyimpan karakter. Karakter dapat digambarkan dalam 1 byte (0‐255) atau 2 byte (0‐65535) atau dengan skema enkoding (
)
(
)
lainnya. Byte 0 mungkin menggambarkan karakter ‘a’ pada skema enkoding tertentu, tetapi mungkin menggambarkan karakter spasi pada skema enkoding lainnya.

Java didesain sebagai bahasa yang tidak bergantung platform, sehingga menggunakan skema enkoding yang dikenal sebagai hi
k
k
k di
dik l b i
karakter Unicode. Skema ini digunakan Java untuk menangani stream karakter. Masing2 OS memiliki tipe karakter enkoding yang mungkin berbeda.
k b b d

Contoh, Windows menggunakan ISO 8859‐1 (atau ANSI), dan M i t h
Macintosh menggunakan Macintosh Latin‐2. Terdapat lebih dari k M i t h L ti 2 T d t l bih d i
100 set karakter berbeda yang dapat dikenali oleh Java.
K ARAKTER E NKODING
( CONT.)
T EXT R EPRESENTATION

Java menggunakan
Ja
a e ggu a a 2 macam
aca representasi
ep ese tas te
teks:
s
~
Unicode
|
~
Untuk merepresentasikan character dan
string secara internal
UTF
|
Untuk pertukaran data teks
data teks melalui network
|
UTF = UCS Transformation Format
|
UCS = Universal Character Set
UCS Universal Character Set
C ARA MENGGUNAKAN STREAM
PROSEDUR PENGGUNAAN BYTE STREAM DAN CHARACTER
STREAM SAMA
Input stream
1.
Membuat obyek yg
berasosiasi dg data source.
Output stream
1.
Mis : FileInputStream
2.
Membaca informasi
dari stream dg menggunakan
method obyek tsb.
Mis: read()
3. Bila selesai, panggil
method close.
Membuat obyek yg
berasosiasi dg data destination.
Mis : BufferedWriter
2.
Menulis informasi ke
stream tujuan dg menggunakan
method obyek tsb.
Mis: write()
3. Bila selesai, panggil
method close.
T HE JAVA . IO H IERARCHY

Package java.io dibuat sedemikian rupa sehingga
memudahkan
d hk pengguna dalam
d l melakukan
l k k input i
t
atau output berbagai tipe data seperti Objects, g
y
g minimal amount of Strings, dan
bytes dengan
coding.

Juga d
didesain
desa supaya b
bisa
sa menerima
e e a input dan
put da
output dari berbagai sumber seperti keyboard, network, dan disk.
I NPUT S TREAM AND
O UTPUT S TREAM C LASSES

Level tertinggi pada hirarki package java.io adalah
dua abstract class: InputStream dan OutputStream

Keduanya langsung dibuat dengan meng
meng‐ extend extend
class Object. 
Class InputStream
Class
InputStream dan OutputStream mempunyai
beberapa method dasar untuk membaca dan
menulis bytes.
y
I NPUT S TREAM DAN
O UTPUT S TREAM

InputStream dan OutputStream adalah putSt ea da OutputSt ea ada a
abstract class untuk stream I/O, yaitu untuk membaca dan menulis data dari dan ke file.
dan ke file

Untuk membaca digunakan class yang mengimplementasikan InputStream
mengimplementasikan InputStream, contoh : FileInputStream.

Untuk menulis digunakan class yang Untuk
menulis digunakan class yang
mengimplementasikan OutputStream, contoh : FileOutputStream.
H IRARKI C LASS I NPUT S TREAM DAN
O UTPUT S TREAM
InputStream
FileInputStream
ByteArrayInputStream
FilterInputStream
l
DataInputStream
BufferedInputStream
PushbackInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
OutputStream
FileOutputStream
ByteArrayOutputStream
FilterOutputStream
p
DataOutputStream
BufferedOutputStream
PrintStream
ObjectOutputStream
PipedOutputStream
M EMBACA F ILE :
F ILE I NPUT S TREAM
Untuk membaca file dari disk, diperlukan langkah‐langkah:
1 Definisikan nama file yang akan
1.
file yang akan dibaca melalui class
File, atau nama file lengkap dengan path.
2. Periksa apakah file tersebut ada (exist) dan tipenya
adalah file (bukan direktori).
3. Siapkan obyek FileInputStream untuk membaca isi file.
4 B
4. Baca input dengan
i
d
menggunakan
k method read(),
h d
d() dan
d
bila tidak ada input lagi, FileInputStream memberikan
indikator ‐1
1 sebagai
sebagai tanda tidak ada lagi data yang akan
data yang akan
dibaca. 5. Gunakan method close() untuk menutup FileStream.
C ONTOH 1:
M EMBACA F ILE
Program yang menggunakan
class FileInputStream untuk
menghitung jumlah bytes yang dibaca dari File.
Perhatikan bahwa membaca
file dapat menyebabkan
Exception, karena itu
diperlukan penangkapan
sinyal exception bila
exception bila terjadi
error.
C ONTOH 2:
M EMBACA F ILE
Program yang membaca
file dengan
gg
menggunakan
FileInputStream dan
menggunakan
PrintStream untuk
menampilkan data yang telah dibaca dari file.
Contoh PrintStream: System.out
Gunakan method println() atau print() untuk menampilkan
p
data.
M ENULIS F ILE :
F ILE O UTPUT S TREAM
Untuk menulis file ke disk, diperlukan langkah‐langkah:
1. Definisikan nama file yang akan diupdate melalui class File, atau nama file lengkap dengan path.
2. Siapkan obyek FileOutputStream untuk menulis isi file.
3. Gunakan method write() dan getBytes() untuk menulis data.
‐ write() menulis array dari byte, maka data yang akan
dit li harus
ditulis
h
dit
ditransfer
f terlebih
t l bih dahulu
d h l ke
k array.
‐ untuk memindah data dari tipe String ke array gunakan
method getBytes()
method getBytes().
4. Gunakan method flush() untuk memaksa sistem untuk
mentransfer isi buffer di memori ke disk.
5. Gunakan method close() untuk menutup FileStream.
C ONTOH
Program dengan
menggunakan class FileOutputStream untuk
menulis File.
Perhatikan bahwa
menulis file dapat
menyebabkan
Exception, karena itu
diperlukan
penangkapan sinyal
exception bila terjadi
error.
R EADER DAN W RITER



Digunakan untuk membaca dan menulis data tekstual.
tekstual
Lebih mudah daripada menggunakan
InputStream dan OutputStream.
Untuk mempercepat performance, gunakan
fasilitas buffering dengan: BufferedReader. g
g
R EADER

Untuk membaca teks baris per baris digunakan teknik
sebagai berikut:
File f = new File(“c:\\oop\\text.txt”);
FileReader fr = new FileReader(f);
BufferedReader fin= new BufferedReader(fr);

FileReader adalah jalur yang disediakan
yang disediakan untuk membaca
File.

BufferedReader membungkus FileReader agar input agar input
tersebut dapat dikelola dengan teknik buffering, yaitu tidak
membaca per satu karakter, melainkan menyimpan dalam
b ff
buffer, setelah
t l h penuh
h (atau
( t setelah
t l h newline terdeteksi), li t d t k i)
buffer akan diberikan ke program.
H IRARKI C LASS R EADER
Reader
BufferedReader
LineNumberReader
CharArrayReader
FilterReader
PushBackReader
InputStreamReader
FileReader
PipedReader
StringReader
Writer
BufferedWriter
CharArrayWriter
FilterWriter
OutputStreamWriter
FileWriter
PipedReader
S i Wi
StringWriter
PrintWriter
DAN
W RITER
R EADER

Setelah obyek BufferedReader terbentuk, maka Setelah
obyek BufferedReader terbentuk, maka
String dapat diambil dengan method readLine()
yang mengembalikan nilai balik String.

Untuk menampilkan data ke layar gunakan print()
atau println().

Contoh: membaca file dan menampilkan data ke layar.
W RITER




Untuk menulis teks baris per baris digunakan
teknik sebagai berikut:
File f = new
File(“c:\\oop\\MyText.txt”);
FileWriter fw = new
FileWriter(f);
PrintWriter fin = new
PrintWriter(fw);
( );
Enkapsulasi file menjadi FileWriter diperlukan
untuk mendefinisikan jalur output.
Pembungkusan dengan PrintWriter diperlukan
agar program dapat menggunakan method print() dan println() atas obyek tersebut.
Contoh: Menulis file
Contoh: Menulis
R ANDOM A CCESS F ILE

Perbedaan RandomAccessFile(RAF) dengan Perbedaan
RandomAccessFile(RAF) dengan
FileInputStream dan FileOutputStream adalah sekali RAF dibuat maka bisa dibaca dan sekaligus ditulis.
dan sekaligus ditulis

RAF bisa dibaca dan ditulis pada titik tertentu d l fil d
dalam file dengan menggunakan file pointer. k fil
i t

file pointer adalah variabel bertipe long yang menyimpan dimana RandomAccessFile akan d
d
l k
dibaca dan ditulis dalam file.
R ANDOM A CCESS F ILE

RandomAccessFile mengimplementasikan RandomAccessFile
mengimplementasikan
DataInput dan DataOutput, sehingga RAF mempunyai semua method yang dipunyai oleh DataInput dan DataOutput. D I
d D O

RAF juga mempunyai methodnya sendiri.
S EEKING

Methods that support seeking
pp
g
~
long getFilePointer() throws IOException Returns the current position within the file, in bytes. Subsequent reading and writing will take place Subsequent reading and writing will take place
starting at this position.
~
long length() throws IOException
Returns the length of the file, in bytes.
~
void seek(long position) throws IOException
void
seek(long position) throws IOException Sets Sets
the current position within the file, in bytes. Subsequent reading and writing will take place starting at this position. Files start at position 0.
R ANDOM -A CCESS F ILE M ETHODS
FOR P RIMITIVE D ATA T YPES
T HE R ANDOM A CCESS F ILE
C LASS

Constructors:
RandomAccessFile(String file, String
mode)
RandomAccessFile(File
String
R d A
Fil (Fil file,
fil
St i
mode)


Open file mode:
Open file mode:
~
“r”
: reading only
~
“rw”
: reading and writing
rw = This line of code will open a file or create one if it is not present already
C ONTOH :
public static void main(String[] args) throws IOException{
public static void main(String[] args) throws IOException{
(
);
File f = new File("test3.txt");
if (!f.isFile() || !f.canRead() || !f.canWrite()) throw new IOException();
RandomAccessFile raf = new
= new RandomAccessFile(f, RandomAccessFile(f "rw");
rw );
}
RANDOM - ACCESS FILES
FUNCTIONALITY:

Seeking to any position within a file
Seeking to any position within a file

Reading and writing single or multiple bytes

Reading and writing groups of bytes, treated as higher‐level data types

Closing
C ONTOH :
R ANDOM A CCESS F ILE

Obyek RandomAccessFile dapat Obyek
RandomAccessFile dapat
menambahkan (append) data di akhir file. 
Berbeda dengan FileOutputStream yang Berbeda dengan FileOutputStream yang
meng‐ overwrite semua data yang sebelumnya sudah ada.

Jika menambahkan data pada file, data yang ada setelah pointer akan di overwrite.

File yang ditulis oleh FileOutputStream dapat dibaca oleh RandomAccessFile.
M EMBACA I NPUT D ARI
K EYBOARD

Gunakan System.in sebagai InputStream untuk
mendapatkan input dari
input dari keyboard.

Ingat! System.in adalah InputStream Æ agar input bisa
didapat melalui Reader, maka
Reader, maka diperlukan enkapsulasi
sebagai berikut:
InputStreamReader isr = new InputStreamReader(System.in);
InputStreamReader(System in);
BufferedReader buf = new BufferedReader(isr);

SSelanjutnya
l j t
St i d t diperoleh
String dapat
di
l h dengan
d
mengaplikasikan readLine(). String
i
s = buf.readLine();
b f
d i ()

Question??
Download