Operasi I/O
Disampaikan pada mata kuliah Object Oriented Programming
Handrizal, S.Si.M.Comp.Sc.
Pengenalan Streams
Dalam Java, operasi I/O menggunakan
streams.
Streams adalah abstraksi dari sesuatu yang
digunakan untuk menulis/menghasilkan dan
membaca/mendapatkan suatu informasi.
Semua streams memiliki sifat yang sama
walaupun peralatan fisik yang berhubungan
dengan suatu stream berbeda-beda.
2
Pengenalan Streams
Secara umum streams dalam Java dibagi dalam 2 bagian
besar :
byte streams
character streams
Byte Streams digunakan untuk operasi I/O yang
menggunakan data biner (byte)
Character Streams digunakan untuk menangani operasi I/O
yang menggunakan character.
Karakter dalam java menggunakan Unicode, sehingga penggunaan
character streams dapat digunakan untuk menangani karakter-
karakter internasional (karakter diluar kode ASCII Standar)
Semua class & interface yang berhubungan dengan streams
ada dalam package java.io.
3
Byte Streams
Byte stream diperkenalkan oleh Java sejak
JDK 1.0
Untuk byte streams, Java menyediakan dua
class abstrak yang merupakan superclass
tertinggi yaitu :
InputStream untuk membaca input
OutputStream untuk menuliskan output
4
Character Streams
Character stream diperkenalkan oleh Java
sejak JDK 1.1
Untuk character streams, Java menyediakan
dua class abstrak yang merupakan superclass
tertinggi yaitu :
Reader untuk membaca input
Writer untuk menuliskan output
5
Variabel Streams Standar
Secara default, Java telah menyediakan 3 buah
variabel streams yang dapat langsung digunakan,
karena variabel ini member public static dari class
System, yaitu : in,out,err.
System.out : output stream standar. Secara default
outputnya adalah console.
System.in : input stream standar. Secara default
inputya adalah keyboard.
System.err : output stream untuk mencetak pesan
kesalahan pada console (default).
6
Membaca Input dari Console
menggunakan Byte Streams
Untuk membaca dari console digunakan
variabel stream standar yang telah disediakan
oleh class System, yaitu in.
Variabel ini memegang referensi dari objek
dengan tipe InputStream sehingga untuk
membaca dari console (yang diketik lewat
keyboard), dapat menggunakan method read
7
Membaca Input dari Console menggunakan Byte Streams
Contoh 1 :
1. import java.io.*;
2. public class DemoStream1
3. {
4. public static void main(String[] args) {
5. byte[] data = new byte[10];
6. System.out.print("Masukkan data : ");
7. try {
8. System.in.read(data);
9. } catch (IOException e) {
10. System.out.print("Terjadi Exception");
11. }
12. System.out.print("Yang anda ketik : ");
13. for (int i=0;i<data.length;i++) {
14. System.out.print((char)data[i]);
15. }
16. }
17. }
8
Membaca Input dari Console menggunakan Byte Streams
Contoh 2 :
1. import java.io.*;
2. public class DemoStream2
3. {
4. public static void main(String[] args) {
5. byte[] data = new byte[10];
6. int panjang=0;
7. System.out.print("Masukkan data : ");
8. try {
9. panjang=System.in.read(data);
10. } catch (IOException e) {
11. System.out.print("Terjadi Exception");
12. }
13. System.out.println("Yang anda ketik : ");
14. for (int i=0;i<panjang;i++) {
15. System.out.print((char)data[i]);
16. }
17. System.out.println("Panjang Karakter : "+panjang);
18. }
19. }
9
Menulis Output ke Console
menggunakan Byte Streams
Untuk menulis ke console digunakan variabel
stream standar yang telah disediakan oleh class
System, yaitu out.
Variabel ini memegang referensi dari objek dengan
tipe PrintStream.
PrintStream merupakan turunan dari class
OutputStream.
Method yang biasa digunakan :
print(),println(),write().
10
Menulis Output ke Console menggunakan Byte Streams
Contoh 3 :
1. import java.io.*;
2. public class DemoStream3
3. {
4. public static void main(String[] args) {
5. byte[] data = new byte[10];
6. int panjang=0;
7. System.out.print("Masukkan data : ");
8. try {
9. panjang=System.in.read(data);
10. System.out.print("Yang anda ketik : ");
11. System.out.write(data);
12. System.out.println("Panjang Karakter : "+panjang);
13. System.out.print("index ke-1 sebnyk 3 : ");
14. System.out.write(data,1,3);
15. } catch (IOException e) {
16. System.out.print("Terjadi Exception");
17. }
18.
19. }
20. }
11
Membaca Input dari File
Untuk membaca dari file dengan
menggunakan byte stream, dapat digunakan
class FileInputStream.
Deklarasi konstruktornya :
FileInputStream(File file)
throws FileNotFoundException
FileInputStream (String name)
throws FileNotFoundException
12
Membaca Input dari File
Contoh 4 :
1. import java.io.*;
2. public class DemoStream4 {
3. public static void main(String[] args) {
4. byte data;
5. String namaFile = "test.txt";
6. FileInputStream fin = null;
7. try {
8. fin = new FileInputStream(namaFile);
9. data = (byte)fin.read();
10. while (data!=-1) {
11. System.out.print((char)data);
12. data = (byte)fin.read();
13. }
14. }
15. catch (FileNotFoundException e) {
16. System.out.println("File "+namaFile+" tidak ditemukan");
17. }
18. catch (IOException e) {
19. System.out.println("Terjadi Exception");
20. }
13
Membaca Input dari File
Contoh 4 (lanjutan) :
1. finally {
2. if (fin!=null) {
3. try {
4. fin.close();
5. }
6. catch (IOException e) {
7. System.out.println("Terjadi Exception");
8. }
9. }
10. }
11. }
12. }
14
Menulis Output ke File
Untuk menulis ke file dengan menggunakan byte
stream,dapat digunakan class FileOutputStream.
Deklarasi konstruktornya :
FileOutputStream(String name)
throws FileNotFoundException
FileOutputStream(String name,boolean append)
throws FileNotFoundException
FileOutputStream(File file)
throws FileNotFoundException
FileOutputStream(File file,boolean append)
throws FileNotFoundException
15
Menulis Output ke File
Contoh 5 :
1. import java.io.*;
2. public class DemoStream5 {
3. public static void main(String[] args) {
4. byte data;
5. String namaFile = "test.txt";
6. FileOutputStream fout = null;
7. try {
8. fout = new FileOutputStream(namaFile);
9. System.out.println("Ketik : ");
10. data = (byte)System.in.read();
11. while (data!=(byte)'\r') {
12. fout.write(data);
13. data = (byte)System.in.read();
14. }
15. }
16. catch (FileNotFoundException e) {
17. System.out.println("File "+namaFile+" tidak dapat dicreate");
18. }
19. catch (IOException e) {
20. System.out.println("Terjadi Exception");
21. }
16
Menulis Output ke File
Contoh 5 (lanjutan) :
1. finally {
2. if (fout!=null) {
3. try {
4. fout.close();
5. }
6. catch (IOException e) {
7. System.out.println("Terjadi Exception");
8. }
9. }
10. }
11. }
12. }
17
Membaca Input dari Console
menggunakan Character Streams
Setiap karakter di Java = 16 bit.
Masalah : System.in beroperasi menggunakan byte
stream (8 bit)
Bagaimana caranya menggunakan System.ini pada
character streams?
Solusi : Bungkus System.in dengan class
InputStreamReader yang dapat mengkonversi
byte streams ke character streams
Deklarasi konstruktor nya :
InputStreamReader (Input Stream in)
18
Membaca Input dari Console
menggunakan Character Streams
Masalah lain : byte streams (8 bit) ukurannya lebih kecil
dari char (16bit).
Bagaimana mengkonversi dari byte streams menjadi char streams
dengan benar?
InputStreamReader input =
new InputStreamReader(System.in);
BufferedReader buff = new BufferedReader(input);
BufferedReader buff =
new BufferedReader(
new InputStreamReader(System.in));
20
Membaca Input dari Console
menggunakan Character Streams
Untuk membaca character streams, dapat menggunakan
method :
21
Membaca Input dari Console menggunakan Character Streams
Contoh 6 :
1. import java.io.*;
2. public class DemoStream6 {
3. public static void main(String[] args) throws IOException {
4. char data;
5. String str="";
6. BufferedReader buff =
7. new BufferedReader(new InputStreamReader(System.in));
8. System.out.println("Ketik : ");
9. data = (char) buff.read();
10. while (data!='\r') {
11. str+=data;
12. data = (char) buff.read();
13. }
14. System.out.println("Yang diketik : "+str);
15. System.out.println("Program Selesai");
16. }
17. }
22
Membaca Input dari Console menggunakan Character Streams
Contoh 7 :
1. import java.io.*;
2. public class DemoStream7 {
3. public static void main(String[] args) throws IOException {
4. String str;
5. String hasil="";
6. BufferedReader buff =
7. new BufferedReader(new InputStreamReader(System.in));
8. System.out.println("Ketik (akhiri dengan EXIT) : ");
9. str = buff.readLine();
10. while (!str.equals("EXIT")) {
11. hasil+=str+'\n';
12. str = buff.readLine();
13. }
14. System.out.println("Yang diketik : "+hasil);
15. System.out.println("Program Selesai");
16. }
17. }
23
Menulis Output ke Console
menggunakan Character Streams
Untuk menulis output ke console dengan Character Streams,
adalah dengan cara membungkus System.out dengan object
output stream yang mendukung character streams.
Dalam hal ini gunakan class PrintWriter
Deklarasi konstruktornya :
PrintWriter (OutputStream out);
PrintWriter (OutputStream out,Boolean autoFlush);
Contoh :
PrintWriter output =
new PrintWriter (System.out,true);
24
Menulis Output ke Console menggunakan Character Streams
Contoh 8 :
1. import java.io.*;
2. public class DemoStream8 {
3. public static void main(String[] args) throws IOException {
4. PrintWriter output = new PrintWriter (System.out,true);
5. output.println("Hello World");
6. }
7. }
25
Membaca Input dari File menggunakan
Character Streams
Untuk membaca input dari File dengan
character streams, gunakan :
26
Membaca Input dari File menggunakan Character Streams
Contoh 9 :
1. import java.io.*;
2. public class DemoStream9 {
3. public static void main(String[] args) {
4. String data;
5. String namaFile = "test.txt";
6. FileReader fin = null;
7. try {
8. fin = new FileReader(namaFile);
9. BufferedReader buff = new BufferedReader(fin);
10. data = buff.readLine();
11. while (data!=null) {
12. System.out.print(data);
13. data = buff.readLine();
14. }
15. }
16. catch (FileNotFoundException e) {
17. System.out.println("File "+namaFile+" tidak ditemukan");
18. }
19. catch (IOException e) {
20. System.out.println("Terjadi Exception");
21. }
27
Membaca Input dari File menggunakan Character Streams
Contoh 9 (lanjutan):
1. finally {
2. if (fin!=null) {
3. try {
4. fin.close();
5. }
6. catch (IOException e) {
7. System.out.println("Terjadi Exception");
8. }
9. }
10. }
11. }
12. }
28
Menulis Output ke File menggunakan
Character Streams
Untuk menulis ke file dengan menggunakan character
stream,dapat digunakan class FileWriter.
Deklarasi konstruktornya :
FileWriter(String fileName)
throws FileNotFoundException
FileWriter(String fileName, boolean append)
throws FileNotFoundException
FileWriter(File file)
throws FileNotFoundException
FileWriter(File file,boolean append)
throws FileNotFoundException
29
Menulis Output ke File menggunakan Character Streams
Contoh 10 :
1. import java.io.*;
2. public class DemoStream10 {
3. public static void main(String[] args) {
4. String data;
5. String namaFile = "test.txt";
6. FileWriter fout = null;
7. BufferedReader buff =
8. new BufferedReader(new InputStreamReader(System.in));
9. try {
10. fout = new FileWriter(namaFile);
11. System.out.println("Ketik : ");
12. data = buff.readLine();
13. while (!data.equals("EXIT")) {
14. fout.write(data+"\r\n");
15. data = buff.readLine();
16. }
17. }
30
Menulis Output ke File menggunakan Character Streams
Contoh 10 :
1. catch (FileNotFoundException e) {
2. System.out.println("File "+namaFile+" tidak dapat dicreate");
3. }
4. catch (IOException e) {
5. System.out.println("Terjadi Exception");
6. }
7. finally {
8. if (fout!=null) {
9. try {
10. fout.close();
11. }
12. catch (IOException e) {
13. System.out.println("Terjadi Exception");
14. }
15. }
16. }
17. }
18. }
31