T
OPIK
T
OPIK
Overview I/O Streams
Byte stream & Character Stream
Hirarki class pada package java.io
Read & write streams
~ InputStream & OutputStream ~ Reader & Writer ~ RandomAccessFile M
filt
t
Memfilter stream
S
TREAM
I/O
S
TREAM
I/O
Semua data di Java dibaca dan ditulis dengang
menggunakan stream.
Stream adalah representasi abstrak dari aliran
data yang berjalan dari sumber (input stream) ke data yang berjalan dari sumber (input stream) ke tujuan (output stream).
Contoh:
~ Membaca dan menulis file di dan ke harddisk
~ Memcaca dan menulis teks ke console.
~ M b d li l l i t k
I/O S
TREAMS
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
S
TREAM
S
TREAM
Byte stream (8 bit) Byte stream (8 bit)
digunakan untuk byte, integer, dan simple data type yang lain.yp y g
Misal: numerical data, executable programs, dll
Character stream (16bit)
digunakan untuk data tekstual (teks), mendukung unicode.
B
YTE
S
TREAM
C
HARACTER
S
TREAM
K
ARAKTER
E
NKODING
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, hi k k k di dik l b i sehingga menggunakan skema enkoding yang dikenal sebagai karakter Unicode. Skema ini digunakan Java untuk menangani stream karakter. Masing2 OS memiliki tipe karakter enkoding yang k b b d mungkin berbeda. Contoh, Windows menggunakan ISO 8859‐1 (atau ANSI), dan M i t h k M i t h L ti 2 T d t l bih d i Macintosh menggunakan Macintosh Latin‐2. Terdapat lebih dari 100 set karakter berbeda yang dapat dikenali oleh Java.K
ARAKTER
E
NKODING
T
EXT
R
EPRESENTATION
T
EXT
R
EPRESENTATION
Java menggunakan 2 macam representasi teks:Ja a e ggu a a aca ep ese tas te s
~ Unicode
| Untuk merepresentasikan character dan string secara internal
~ UTF
| Untuk pertukaran data teks melalui network
| Untuk pertukaran data teks melalui network
| UTF = UCS Transformation Format
| UCS = Universal Character Set
C
ARA MENGGUNAKAN STREAM
PPROSEDUR PENGGUNAAN BYTE STREAM DAN CHARACTER STREAM SAMA Input stream Output stream 1. Membuat obyek yg berasosiasi dg data source. 1. Membuat obyek yg berasosiasi dg data destination. Mis : FileInputStream 2. Membaca informasi Mis : BufferedWriter 2. Menulis informasi ke dari stream dg menggunakan method obyek tsb. stream tujuan dg menggunakan method obyek tsb. Mis: read() 3. Bila selesai, panggil method close. Mis: write() 3. Bila selesai, panggil method close.
T
HE JAVA IO
H
IERARCHY
T
HE JAVA
.
IO
H
IERARCHY
Package java.io dibuat sedemikian rupa sehingga
d hk d l l k k i t memudahkan pengguna dalam melakukan input atau output berbagai tipe data seperti Objects, Strings, dan bytes dengan minimal amount of g y g coding.
Juga didesain supaya bisa menerima input danJuga d desa supaya b sa e e a 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‐ extend Keduanya langsung dibuat dengan meng extend
class Object.
Class InputStream dan OutputStream mempunyai 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 l FilterInputStream DataInputStream BufferedInputStream PushbackInputStream ObjectInputStream PipedInputStream SequenceInputStream OutputStream FileOutputStream ByteArrayOutputStream FilterOutputStreamp DataOutputStream BufferedOutputStream PrintStream ObjectOutputStream ObjectOutputStream PipedOutputStreamM
EMBACA
F
ILE
:
F
ILE
I
NPUT
S
TREAM
Untuk membaca file dari disk, diperlukan langkah‐langkah:
1 Definisikan nama file yang akan dibaca melalui class 1. Definisikan nama 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 i d k h d d() d
4. Baca input dengan menggunakan method read(), dan bila tidak ada input lagi, FileInputStream memberikan indikator ‐1 sebagai tanda tidak ada lagi data yang akan indikator 1 sebagai tanda tidak ada lagi data yang akan dibaca.
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 terjadi sinyal exception bila terjadi error.
C
ONTOH
2:
M
EMBACA
F
ILE
Program yang membaca file dengan menggunakangg FileInputStream dan menggunakan PrintStream untuk PrintStream untuk menampilkan data yang telah dibaca dari file.Contoh PrintStream:
System.out
Gunakan method println() atau print()
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 h dit f t l bih d h l k
ditulis harus ditransfer terlebih dahulu ke 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.
C
ONTOH
C
ONTOH
Program dengan menggunakan class FileOutputStream untuk menulis File. Perhatikan bahwa menulis file dapat menyebabkan menyebabkan Exception, karena itu diperlukan penangkapan sinyal exception bila terjadi error. error.R
EADER DAN
W
RITER
R
EADER DAN
W
RITER
Digunakan untuk membaca dan menulis data
tekstual tekstual.
Lebih mudah daripada menggunakan
InputStream dan OutputStream. InputStream dan OutputStream.
Untuk mempercepat performance, gunakan
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 untuk membaca FileReader adalah jalur yang disediakan untuk membaca
File.
BufferedReader membungkus FileReader agar input
BufferedReader membungkus FileReader agar input
tersebut dapat dikelola dengan teknik buffering, yaitu tidak membaca per satu karakter, melainkan menyimpan dalam b ff t l h h ( t t l h li t d t k i) buffer, setelah penuh (atau setelah newline terdeteksi), buffer akan diberikan ke program.
H
IRARKI
C
LASS
R
EADER DAN
W
RITER
H
IRARKI
C
LASS
R
EADER DAN
W
RITER
Reader BufferedReader LineNumberReader CharArrayReader FilterReader PushBackReader InputStreamReader InputStreamReader FileReader PipedReader StringReader Writer BufferedWriter CharArrayWriter FilterWriter FilterWriter OutputStreamWriter FileWriter PipedReader S i W i StringWriter PrintWriter
R
EADER
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
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 Pembungkusan dengan PrintWriter diperlukan
agar program dapat menggunakan method print() dan println() atas obyek tersebut.
Contoh: Menulis file Contoh: Menulis file
R
ANDOM
A
CCESS
F
ILE
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 k fil i t dalam file dengan menggunakan file pointer. file pointer adalah variabel bertipe long yang d d l k menyimpan dimana RandomAccessFile akan dibaca dan ditulis dalam file.
R
ANDOM
A
CCESS
F
ILE
R
ANDOM
A
CCESS
F
ILE
RandomAccessFile mengimplementasikan RandomAccessFile mengimplementasikan DataInput dan DataOutput, sehingga RAF mempunyai semua method yang dipunyai oleh D I d D O DataInput dan DataOutput. RAF juga mempunyai methodnya sendiri.
S
EEKING
S
EEKING
Methods that support seekingpp 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 Sets
~ void seek(long position) throws IOException 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)
R d A Fil (Fil fil St i
RandomAccessFile(File file, String
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
C
ONTOH
:
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 RandomAccessFile(f "rw"); RandomAccessFile raf = new RandomAccessFile(f, 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
C
ONTOH
:
R
ANDOM
A
CCESS
F
ILE
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 keyboard.
mendapatkan input dari keyboard.
Ingat! System.in adalah InputStream Æ agar input bisa
didapat melalui Reader, maka diperlukan enkapsulasi
didapat melalui Reader, maka diperlukan enkapsulasi
sebagai berikut:
InputStreamReader isr = new InputStreamReader(System in);
InputStreamReader isr new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(isr);
S l
j t
St i
d
t di
l h d
Selanjutnya String dapat diperoleh dengan
mengaplikasikan readLine().
i b f d i () String s = buf.readLine();
Question?? Question??