Input/output dan Kelas File

Download Report

Transcript Input/output dan Kelas File

Dasar-Dasar Input/Output
 Java menyediakan dukungan terhadap proses
Input/Output (I/O) dalam package java.io.
 Di dalam package tersebut tersimpan banyak
interface dan kelas yang akan memudahkan
programmer melakukan pengambilan dan
penyimpanan informasi ke media lain (misalnya ke
suatu file)
Stream
 Stream adalah sebuah abstraksi yang dapat memberikan




atau mendapatkan informasi.
Stream dapat dihubungkan dengan peralatan fisik yang
terdapat dalam sistem I/O, seperti keyboard, file, layar
console, dll.
Cara kerja stream selalu sama, meskipun peralatan yang
terhubung dengannya berbeda.
Kode program yang kita tulis akan sama untuk masingmasing peralatan fisik yang terhubung dengan stream yang
bersangkutan
Contohnya, programmer dapat menggunakan method dan
kelas yang sama untuk melakukan penulisan teks, baik ke
console maupun ke dalam file
Tipe-tipe Stream
 Byte Stream
memberikan atau menyimpan informasi data dalam
bentuk byte, misalnya untuk menulis dan membaca
file biner.
 Character Stream
digunakan untuk melakukan I/O yang melibatkan
data dalam bentuk karakter, misalnya proses
baca/tulis ke file berisi teks.
Kelas-kelas Stream
 Stream didefinisikan dengan empat buah kelas
abstrak: InputStream, OutputStream,
Reader, Writer
 Kelas InputStream dan OutputStream adalah
kelas abstrak yang merupakan kelas induk dari kelaskelas yang termasuk dalam kategori byte stream
 Kelas Reader dan Writer adalah kelas abstrak yang
merupakan kelas induk dari kelas-kelas yang termasuk
dalam kategori character stream
 Semua kelas turunan dari InputStream maupun
Reader memiliki method read() untuk membaca
data
 Semua kelas turunan dari OutputStream maupun
Writer memiliki method write() untuk menulis
data
 Kedua method tersebut adalah method abstrak
Byte Stream
 Byte stream didefinisikan dengan menggunakan dua
buah hirarki kelas
 Urutan paling atas dari hirarki tersebut adalah kelas
InputStream dan OutputStream
 Tabel berikut memperlihatkan beberapa daftar kelas
turunan dari kelas InputStream dan
OutputStream
Nama Kelas
Keterangan
BufferedInputStream
Input stream yang telah ter-buffer
BufferedOutputStream
Output Stream yang telah ter-buffer
ByteArrayInputStream
Input stream yang membaca dari array byte
ByteArrayOutputStream
Output stream yang menulis ke array byte
DataInputStream
Input stream yang meiliki method-method untuk membaca tipe data standar
yang terdapat dalam java
DataOutputStream
Out stream yang meiliki method-method untuk menulis tipe data standar yang
terdapat dalam java
FileInputStream
Input stream yang membaca data dari sebuah file
FileOutputStream
Output stream yang menulis data ke sebuah file
PipedInputStream
Penyalur input
PipedOutputStream
Penyalur output
PrintStream
Output stream yang berisi method println() dan print()
Character Stream
 Character stream didefinisikan dengan menggunakan
dua buah hirarki kelas
 Urutan paling atas dari hirarki tersebut adalah kelas
Reader dan Writer
 Tabel berikut memperlihatkan beberapa daftar kelas
turunan dari kelas Reader dan Writer
Nama Kelas
Keterangan
BufferedReader
Character stream input yang telah ter-buffer
BufferedWriter
Character Stream output yang telah ter-buffer
CharArrayReader
membaca dari array character
CharArrayWriter
menulis ke array character
InputStreamReader
Input stream yang menerjemahkan byte ke character
OtuputStreamWriter
Out stream yang menerjemahkan karakter ke byte
FileReader
membaca data dari sebuah file
FileWriter
menulis data ke sebuah file
PipedWriter
Penyalur input
PipedReader
Penyalur output
PrintWriter
Output stream yang berisi method println() dan print()
StringReader
Input stream yang membaca dari sebuah String
StringWriter
Output stream yang menulis ke sebuah String
 Semua program Java otomatis mengimport package




java.lang. Di dalam package ini didefinisikan sebuah
kelas bernama System. Kelas ini mendefinisikan beberapa
aspek yang berkaitan dengan runtime.
Kelas System mendefinisikan tiga variabel stream: in,
out, err. Ketiga variabel ini didefinisikan sebagai public
dan static
System.out mengacu kepada output stream standar,
yang berupa console
System.in mengacu kepada input stream standar yang
berupa keyboard
System.err mengacu pada stream error standar yang
berupa console
Proses Input
 Dalam Java, input console dilakukan dengan
pembacaan terhadap stream System.in
 Untuk mendapatkan karakter-karakter yang
dimasukkan melalui keyboard ke layar console,
System.in perlu dibungkus didalam objek
BufferedReader.
 Hal ini dilakukan untuk membentuk character stream,
karena sebenarnya System.in adalah byte stream
 Bentuk konstruktor dari BufferedReader adalah
BufferedReader(Reader inputReader)
 inputReader adalah stream yang akan
dihubungkan dengan objek dari kelas
BufferedReader yang dibuat.
 Karena Reader adalah kelas abstrak, kita perlu
menggunakan kelas turunannya yang berupa kelas
konkrit. Salah satunya adalah InputStreamReader
yang dapat mengonversi byte ke character
 Agar objek dari InputStreamReader dapat
dihubungkan dengan System.in, perlu digunakan
konstruktor dengan bentuk:
InputStreamReader(InputStream is)
 Pada konstruktor di atas, is dapat diisi dengan
System.in, sehingga untuk membuat objek
BufferedReader yang terhubung dengan keyboard
dapat menggunakan kode:
InputStreamReader isr = new
InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
 Untuk membaca input berupa karakter, gunakan
method read() yang terdapat dalam kelas
BufferedReader.
 Deklarasi method read() adalah sebagai berikut:
int read() throws IOException
Contoh membaca input data
karakter
import java.io.*;
class DemoInputKarakter {
public static void main(String[] args) throws IOException {
System.out.print("Masukkan sembarang karakter: ");
char ch;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
ch = (char) br.read();
System.out.println("Karakter yang dimasukkan adalah \'" +
ch + "\'");
}
}
Input Data String
 Untuk melakukan input berupa String, gunakan
method readLine()
 Deklarasi method tersebut adalah
String readLine() throws IOException
Contoh Membaca Input Data String
import java.io.*;
class DemoInputString {
public static void main(String[] args) throws IOException {
System.out.print("Masukkan nama Anda: ");
String nama;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
nama = br.readLine();
System.out.println("Halo " + nama +
", sudahkah Anda mengerti Java?");
}
Contoh Input Data Numerik
import java.io.*;
class DemoInputNumerik1 {
public static void main(String[] args) throws IOException {
System.out.print("Masukkan sebuah bilangan bulat: ");
String temp;
int bilangan = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// input data dianggap sebagai string
temp = br.readLine();
try {
// konversi dari string ke integer
bilangan = Integer.parseInt(temp);
} catch (NumberFormatException nfe) {
System.out.println("Data yang dimasukkan “+"bukan bilangan bulat");
System.exit(1);
}
System.out.println("Bilangan yang dimasukkan " +
"adalah " + bilangan);
}
}
import java.io.*;
class DemoInputNumerik2 {
public static void main(String[] args) throws IOException {
System.out.print("Masukkan sebuah bilangan riil: ");
String temp;
double bilangan = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// input data dianggap sebagai string
temp = br.readLine();
try {
// konversi dari string ke floating-point
bilangan = Double.parseDouble(temp);
} catch (NumberFormatException nfe) {
System.out.println("Data yang dimasukkan bukan bilangan");
System.exit(1);
}
System.out.println("Bilangan yang dimasukkan " +
"adalah " + bilangan);
}
}
Proses Output
 Sejauh ini, untuk menampilkan output ke console, kita
menggunakan method print() dan println()
 Untuk menuliskan output ke media lainnya, misalkan file,
gunakan method write()
 System.out adalah objek dari tipe PrintStream.
Sedangkan PrintStream adalah turunan dari
OutputStream, maka System.out dapat
menggunakan method write() yang didefinisikan pada
kelas OutputStream.
 Deklarasi method write() adalah
void write(int nilaiByte)
Contoh penggunaan write()
class DemoWrite {
public static void main(String[] args) {
int i = 'A';
byte b = 65;
char c = 'B';
System.out.write(i);
System.out.write(b);
System.out.write(c);
}
}
Kelas PrintWriter
 Selain menggunakan System.out, kita juga dapat
menggunakan kelas PrintWriter untuk menuliskan
data ke layar console.
 Terdapat beberapa bentuk konstruktor dari
PrintWriter, di antaranya ialah
PrintWriter(OutputStream os, boolean flushOnNewLine)
os adalah objek dari OutputStream, sedangkan
flushOnNewLine adalah parameter bertipe
boolean yang menyatakan apakah stream output
akan dibuang atau tidak setiap kali method
println() dipanggil.
 PrintWriter mendukung method print() dan
println() untuk semua tipe data
 Cara pembentukan objek PrintWriter yang dapat
digunakan untuk pembentukkan output adalah:
PrintWriter pw = new PrintWriter(System.out, true)
Contoh PrintWriter
import java.io.PrintWriter;
class DemoPrintWriter {
public static void main(String[] args) {
// membuat objek PrintWriter
PrintWriter pw = new PrintWriter(System.out, true);
double d = 3.1416;
int i = 123;
byte b = 65;
char c = 'A';
String s = "Ini adalah string";
pw.println("Data
pw.println("Data
pw.println("Data
pw.println("Data
pw.println("Data
}
}
bertipe
bertipe
bertipe
bertipe
bertipe
double
int
byte
char
string
:
:
:
:
:
"
"
"
"
"
+
+
+
+
+
d);
i);
b);
c);
s);
Baca Tulis File
 Pada contoh program berikut ditunjukkan cara untuk
membaca data dari sebuah file dan kemudian
menampilkan isi file tersebut ke layar monitor.
import java.io.*;
class DemoBacaFile {
public static void main(String[] args) {
FileInputStream finput = null;
int data;
// membuka file
try {
finput = new FileInputStream("d:/INPUT.TXT");
} catch (FileNotFoundException fnfe) {
System.out.println("File tidak ditemukan.");
return; // keluar dari method
}
// membaca data dari dalam file
// dan menampilkan hasilnya ke layar console
try {
while ((data = finput.read()) != -1) {
// ketika ditampilkan, data dikonversi ke tipe char
System.out.print((char) data);
}
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
return;
}
// menutup file
try {
finput.close();
} catch (IOException ioe) {}
}
}
 Berikut contoh menuliskan data ke file
import java.io.*;
class DemoTulisFile {
public static void main(String[] args) {
FileOutputStream foutput = null;
String data = "Baris pertama \nBaris kedua \nBaris ketiga";
// membuka file
try {
foutput = new FileOutputStream("d:/OUTPUT.TXT");
} catch (FileNotFoundException fnfe) {
System.out.println("File tidak dapat terbentuk.");
return; // keluar dari method
}
// menulis data ke dalam file
try {
for (int i=0; i<data.length(); i++) {
// data akan dikonversi per karakter
foutput.write((int) data.charAt(i));
}
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
return;
}
// menutup file
try {
foutput.close();
} catch (IOException ioe) {}
}
}
 Berikut demo menyalin isi suatu file ke dalam file lain
import java.io.*;
class DemoSalinFile {
public static void main(String[] args) {
FileInputStream finput = null;
FileOutputStream foutput = null;
int data;
// membuka file input
try {
finput = new FileInputStream("d:/FILE1.TXT");
} catch (FileNotFoundException fnfe) {
System.out.println("File input tidak ditemukan");
return; // keluar dari method
}
// membuka file output
try {
foutput = new FileOutputStream("d:/FILE2.TXT");
} catch (FileNotFoundException fnfe) {
System.out.println("File output tidak dapat terbentuk");
return; // keluar dari method
}
// membaca data dari file input
// dan memasukkannya ke dalam file output
try {
while ((data = finput.read()) != -1) {
foutput.write(data);
}
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
return;
}
try {
finput.close();
foutput.close();
} catch (IOException ioe) {}
}
}