PemrogramanDasar-10-Stream-File

advertisement
PEMROGRAMAN DASAR
Sistem Informasi PTIIK UB
Semester Ganjil 2013/2014
Objek Stream, Akses
File & Exception
Handling
Dr. Eng. Herman Tolle, ST., MT
Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya
7 Aspek Dasar Pemrograman
1. Membaca Input Data
2. Menampilkan Output Data
3. Melakukan proses perhitungan (Compute)
4. Penyimpanan Data (Store)
5. Penyeleksi Kondisi (Percabangan)
6. Perulangan (Repetisi)
7. Method – Fungsi
• Array
Materi Tambahan Progdas
• Kelas Math, Kelas String
• Objek Stream, Akses File
• Exception Handling
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 kelas abstrak 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 masing-masing 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
Stream
• Stream adalah proses untuk membaca data
dari suatu sumber atau menulis data ke
suatu tujuan.
• Class stream ini berada pada paket java.io
jadi untuk menggunakan harus diimpor
terlebih dahulu.
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 kelas-kelas yang termasuk dalam
kategori byte stream
• Kelas Reader dan Writer adalah kelas
abstrak yang merupakan kelas induk dari kelaskelas 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
BufferedWriter
CharArrayReader
CharArrayWriter
InputStreamReader
Character stream input yang telah ter-buffer
OtuputStreamWriter
Out stream yang menerjemahkan karakter ke byte
FileReader
FileWriter
PipedWriter
PipedReader
PrintWriter
StringReader
StringWriter
membaca data dari sebuah file
Character Stream output yang telah ter-buffer
membaca dari array character
menulis ke array character
Input stream yang menerjemahkan byte ke character
menulis data ke sebuah file
Penyalur input
Penyalur output
Output stream yang berisi method println() dan print()
Input stream yang membaca dari sebuah String
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)
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);
OPERASI FILE
OPERASI FILE
• Untuk program sederhana, input cukup dari
keyboard kemudian diproses dan
ditampilkan hasilnya ke layar monitor.
• Data yang disimpan dalam variabel, array,
dan objek bersifat sementara, hilang ketika
program berhenti.
• Untuk menyimpan data secara permanen
dalam program, diperlukan suatu file
Operasi File
• Untuk program dengan data yang sangat
besar/ banyak dibutuhkan operasi file.
(nantinya menggunakan file basis data)
• Program akan menyimpan dan membaca
data dari file yang berada di hard disk.
• Dengan operasi file, data menjadi bersifat
permanen. Tidak akan hilang meskipun
komputer dimatikan.
Perintah Operasi File
• Library:
–
–
–
–
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
• Scanner untuk membaca isi file.
• PrintStream untuk menulis ke file.
Contoh: TestKelasFile.java
public class TestKelasFile {
public static void main(String[] args) {
java.io.File file = new java.io.File(“indonesianflag.bmp");
System.out.println("Apakah file ini ada? "+ file.exists());
System.out.println("File memiliki " + file.length() + " byte");
System.out.println("Dapatkah file ini dibaca? " + file.canRead());
System.out.println("Dapatkah file ini ditulis? " + file.canWrite());
System.out.println("Apakah ini direktori? " + file.isDirectory());
System.out.println("Apakah ini suatu file? " + file.isFile());
System.out.println("Apakah ini nama absolut? " + file.isAbsolute());
System.out.println("Apakah file ini hidden? " + file.isHidden());
System.out.println("Absolute path adalah " + file.getAbsolutePath());
System.out.println("Terakhir kali dimodifikasi " + new
java.util.Date(file.lastModified()));
}
}
Penanganan Pengecualian
EXCEPTION HANDLING
Exception Handling
• Exception adalah setiap kejadian yang abnormal, tidak
diharapkan, dan kondisi yang tidak umum yang mungkin
terjadi pada saat run-time program.
• Java exception handling digunakan untuk menangani
kondisi error (exception) dalam sebuah program secara
sistematis dengan melakukan tindakan yang diperlukan.
• Java exception dimulai dengan kata kunci throw atau
dengan kombinasi (try-catch-finally) diperiksa dg try, jika
ada eksepsi maka ditangani dalam catch. Jika tidak ada
eksepsi maka lakukan apa yang ada pada finally.
Contoh exception
• Eksepsi yang sering terjadi adalah:
• Akses File:
– File tidak ada, salah path
– file dalam mode yang tidak sesuai (read only tetapi mau
ditulis)
• Matematis:
– Pembagian nol (divide by zero)
• Akses Objek:
– akses array: array index out of range
Struktur Program dg Exception Handling
try
{ <code> } // statemen yg diperiksa
catch (<exception type1> <parameter1>)
// jika terjadi hal yg tidak diinginkan, maka ..
{ // 0 or more <statements> }
finally // jika tidak ada exception
{ // finally block <statements> }
Contoh Hasil Pembagian Nol
public class DivideException2 {
public static void main(String[] args) {
int result = division(100,0); // Line 2
System.out.println("result : "+result);
}
public static int division(int totalSum, int totalNumber) {
int quotient = -1;
System.out.println("Computing Division.");
try
{ quotient = totalSum/totalNumber; }
catch(Exception e)
{ System.out.println("Exception : "+ e.getMessage()); }
finally
{return quotient; }
}
Baca Tulis File
• Pada contoh program berikut ditunjukkan
cara untuk membaca data dari sebuah file
dan kemudian menampilkan isi file tersebut
ke layar monitor.
Contoh: TulisData.java
public class TulisData {
public static void main(String[] args) throws Exception {
java.io.File file = new java.io.File("skor.txt");
if (file.exists()) {
System.out.println("File sudah ada");
System.exit(0);
}
// Menciptakan suatu file
java.io.PrintWriter keluaran = new java.io.PrintWriter(file);
// Menulis keluaran terformat ke dalam file
keluaran.print(“Budi Sudarsono"); keluaran.println(90);
keluaran.print(“Bambang Pamungkas"); keluaran.println(85);
// Menutup file
keluaran.close();
}
}
BacaData.java
import java.util.Scanner;
public class BacaData {
public static void main(String[] args) throws Exception {
// Menciptakan suatu instans File
java.io.File file = new java.io.File("skor.txt");
// Menciptakan suatu Scanner untuk file
Scanner masukan = new Scanner(file);
// Membaca data dari file
while (masukan.hasNext()) {
String namaPertama = masukan.next();
String namaAkhir = masukan.next();
int score = masukan.nextInt();
System.out.println(
namaPertama + “ " + namaAkhir + " " + score);
}
// Menutup file
masukan.close();
}
}
Contoh: Membaca dari File
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
class ReadAndWrite {
public static void main(String args[])
throws FileNotFoundException {
Scanner diskScanner = new Scanner(new File(“rawData.txt”));
double unitPrice, quantity, total;
unitPrice = diskScanner.nextDouble();
quantity = diskScanner.nextInt();
total = unitPrice * quantity;
System.out.println(total);
}
}
Contoh: Membaca & Menulis dari File
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
class ReadAndWrite {
public static void main(String args[])
throws FileNotFoundException {
Scanner diskScanner = new Scanner(new File(“rawData.txt”));
PrintStream diskWriter = new PrintStream(“cookedData.txt”);
double unitPrice, quantity, total;
unitPrice = diskScanner.nextDouble();
quantity = diskScanner.nextInt();
total = unitPrice * quantity;
diskWriter.println(total);
}
}
import java.io.*;
class DemoBacaFile {
public static void main(String[] args) {
FileInputStream finput = null;
int data;
try {// membuka file
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 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) {}
}
}
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) {}
}
}
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) {}
}
}
Latihan kasus 1
1. Buatlah program untuk menyimpan data
Nama dan Nomor Telepon pada sebuah file
(“contact.txt”)
2. Buatlah program untuk membaca dan
menampilkan isi file tersebut
(“contact.txt”)
3. Buatlah program untuk mencari data
nomor telepon seseorang berdasarkan
input nama yang diberikan pengguna
Latihan Kasus 2
• Aplikasi Contact (Nama, Nomor HP)
• Buat sebuah program dengan menggunakan
menu, dg menu sbb: (1) Input Data (2) Urut
Berdasar Nama (3) Lihat Data (4) Cari (9)
Selesai
• Nama dan nilai bisa diinput kapan saja, dan
otomatis menambahkan pada posisi terakhir
dari file.
Latihan Kasus 3
• Buat sebuah program untuk input data
nama, nilai1, nilai2, nilai3, nilai4 untuk N
mahasiswa, disimpan di file dataNilai.txt
• Buat sebuah program untuk membaca file
dataNilai.txt, menghitung nilai rata-rata,
kemudian menuliskan pada file nilaiAkhir.txt
dengan terurut dari nilai tertinggi
Tugas Bonus
• Mengerjakan pilihan Kasus 1, 2 atau 3.
• Laporan (kasus, source code, screenshot
hasil, isi file)
• Source Code program (.java), file-file
• Di-zip dalam folder: PD-C-Bonus-NIM
• Deadline: 25 Desember 2014
• Send to email
AMAZING PEOPLE DON’T LOOK
FOR JOBS. JOBS FIND THEM!
Download