Chapter 10. Operasi IO

Download Report

Transcript Chapter 10. Operasi IO

Java Progamming
Operasi I/O
Disampaikan pada mata kuliah Object Oriented Programming
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 digunakan untuk operasi I/O yang
menggunakan data biner (byte)
Character Stremas digunakan untuk menangani operasi I/O
yang menggunakan character.


byte streams
character streams
Karakter dalam java menggunakan Unicode, sehingga penggunaan
character streams dapat digunakan untuk menangani karakterkarakter 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
Stream ini digunakan untuk menulis &
membaca data biner
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
Stream ini digunakan untuk menulis &
membaca data yang berupa character.
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.io.*;
public class DemoStream1
{
public static void main(String[] args) {
byte[] data = new byte[10];
System.out.print("Masukkan data
: ");
try {
System.in.read(data);
} catch (IOException e) {
System.out.print("Terjadi Exception");
}
System.out.print("Yang anda ketik : ");
for (int i=0;i<data.length;i++) {
System.out.print((char)data[i]);
}
}
}
8
Membaca Input dari Console menggunakan Byte Streams
Contoh 2 :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
import java.io.*;
public class DemoStream2
{
public static void main(String[] args) {
byte[] data = new byte[10];
int panjang=0;
System.out.print("Masukkan data
: ");
try {
panjang=System.in.read(data);
} catch (IOException e) {
System.out.print("Terjadi Exception");
}
System.out.println("Yang anda ketik : ");
for (int i=0;i<panjang;i++) {
System.out.print((char)data[i]);
}
System.out.println("Panjang Karakter : "+panjang);
}
}
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.io.*;
public class DemoStream3
{
public static void main(String[] args) {
byte[] data = new byte[10];
int panjang=0;
System.out.print("Masukkan data
: ");
try {
panjang=System.in.read(data);
System.out.print("Yang anda ketik : ");
System.out.write(data);
System.out.println("Panjang Karakter : "+panjang);
System.out.print("index ke-1 sebnyk 3 : ");
System.out.write(data,1,3);
} catch (IOException e) {
System.out.print("Terjadi Exception");
}
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
import java.io.*;
public class DemoStream4 {
public static void main(String[] args) {
byte data;
String namaFile = "test.txt";
FileInputStream fin = null;
try {
fin = new FileInputStream(namaFile);
data = (byte)fin.read();
while (data!=-1) {
System.out.print((char)data);
data = (byte)fin.read();
}
}
catch (FileNotFoundException e) {
System.out.println("File "+namaFile+" tidak ditemukan");
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
13
Membaca Input dari File
Contoh 4 (lanjutan) :
finally {
if (fin!=null) {
try {
fin.close();
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
}
}
1.
2.
3.
4.
5.
6.
7.
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import java.io.*;
public class DemoStream5 {
public static void main(String[] args) {
byte data;
String namaFile = "test.txt";
FileOutputStream fout = null;
try {
fout = new FileOutputStream(namaFile);
System.out.println("Ketik : ");
data = (byte)System.in.read();
while (data!=(byte)'\r') {
fout.write(data);
data = (byte)System.in.read();
}
}
catch (FileNotFoundException e) {
System.out.println("File "+namaFile+" tidak dapat dicreate");
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
16
Menulis Output ke File
Contoh 5 (lanjutan) :
finally {
if (fout!=null) {
try {
fout.close();
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
}
}
1.
2.
3.
4.
5.
6.
7.
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?

Solusi : input stream sebaiknya dibaca dari buffer, bukan dari
peralatan fisik langsung. Untuk bungkus objek dari
InputStreamReader ke dalam class
BufferedReader.

Deklarasi konstruktornya :
BufferedReader (Reader in)
19
Membaca Input dari Console
menggunakan Character Streams

Jadi jika ingin membaca dari console dengan Character
Streams, dapat ditulis dengan cara :
InputStreamReader input =
new InputStreamReader(System.in);
BufferedReader buff = new BufferedReader(input);

Atau dengan cara :
BufferedReader buff =
new BufferedReader(
new InputStreamReader(System.in));
20
Membaca Input dari Console
menggunakan Character Streams

Untuk membaca character streams, dapat menggunakan
method :
int read() throws IOException
int read(char[] cbuf) throws IOException
int read(char[] cbuf,int off,int len)
throws IOException
String readLine() throws IOException
21
Membaca Input dari Console menggunakan Character Streams
Contoh 6 :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.io.*;
public class DemoStream6 {
public static void main(String[] args) throws IOException {
char data;
String str="";
BufferedReader buff =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("Ketik : ");
data = (char) buff.read();
while (data!='\r') {
str+=data;
data = (char) buff.read();
}
System.out.println("Yang diketik : "+str);
System.out.println("Program Selesai");
}
}
22
Membaca Input dari Console menggunakan Character Streams
Contoh 7 :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.io.*;
public class DemoStream7 {
public static void main(String[] args) throws IOException {
String str;
String hasil="";
BufferedReader buff =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("Ketik (akhiri dengan EXIT) : ");
str = buff.readLine();
while (!str.equals("EXIT")) {
hasil+=str+'\n';
str = buff.readLine();
}
System.out.println("Yang diketik : "+hasil);
System.out.println("Program Selesai");
}
}
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.
2.
3.
4.
5.
6.
7.
import java.io.*;
public class DemoStream8 {
public static void main(String[] args) throws IOException {
PrintWriter output = new PrintWriter (System.out,true);
output.println("Hello World");
}
}
25
Membaca Input dari File menggunakan
Character Streams

Untuk membaca input dari File dengan
character streams, gunakan :
FileReader (String fileName)
throws FileNotFoundException
26
Membaca Input dari File menggunakan Character Streams
Contoh 9 :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import java.io.*;
public class DemoStream9 {
public static void main(String[] args) {
String data;
String namaFile = "test.txt";
FileReader fin = null;
try {
fin = new FileReader(namaFile);
BufferedReader buff = new BufferedReader(fin);
data = buff.readLine();
while (data!=null) {
System.out.print(data);
data = buff.readLine();
}
}
catch (FileNotFoundException e) {
System.out.println("File "+namaFile+" tidak ditemukan");
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
27
Membaca Input dari File menggunakan Character Streams
Contoh 9 (lanjutan):
finally {
if (fin!=null) {
try {
fin.close();
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
}
}
1.
2.
3.
4.
5.
6.
7.
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.io.*;
public class DemoStream10 {
public static void main(String[] args) {
String data;
String namaFile = "test.txt";
FileWriter fout = null;
BufferedReader buff =
new BufferedReader(new InputStreamReader(System.in));
try {
fout = new FileWriter(namaFile);
System.out.println("Ketik : ");
data = buff.readLine();
while (!data.equals("EXIT")) {
fout.write(data+"\r\n");
data = buff.readLine();
}
}
30
Menulis Output ke File menggunakan Character Streams
Contoh 10 :
catch (FileNotFoundException e) {
System.out.println("File "+namaFile+" tidak dapat dicreate");
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
finally {
if (fout!=null) {
try {
fout.close();
}
catch (IOException e) {
System.out.println("Terjadi Exception");
}
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
}
17.
18.
}
31