Dasar-dasar I/O
Terdapat di paket java.io
Di versi lama masih byte oriented
Di versi baru sudah char oriented
Proses I/O dilakukan dengan stream
Stream = abstraksi yang dapat memberikan atau mendapatkan informasi
Stream dapat dihubungkan dengan peralatan fisik yang terdapat dalam
sistem I/O Java, seperti : keyboard, file, layar console, dan lain-lain.
Input : Keyboard, file, socket jaringan, com, mouse, webcam, mikrofon,
dan lainnya
Output : monitor, speaker, file, socket jaringan, com, printer, dan lainnya
Stream akan memudahkan kita dalam melakukan proses I/O, karena
kode program yang ditulis akan sama untuk masing-masing peralatan
fisik yang dihubungkan dengan stream alat tersebut
Stream
Stream byte : digunakan untuk memberikan atau menyimpan informasi data
dalam bentuk byte/biner
Stream karakter : digunakan ntuk memberikan atau menyimpan informasi data
dalam bentuk karakter
Stream karakter menggunakan unicode
Stream didefinisikan dengan 4 kelas abstrak : InputStream, OutputStream,
Reader, Writer
InputStream, OutputStream : superclass untuk kelas-kelas yang termasuk
kategori stream byte
Reader, Writer : superclass untuk kelas-kelas yang termasuk kategori stream
karakter
Melalui proses inheritance, semua kelas yang diturunkan dari InputStream
maupun Reader akan memiliki method read() yang digunakan untuk pembacaan
data
Semua kelas yang diturunkan dari Outputstream maupun Writer akan memiliki
method write () yang digunakan untuk penulisan data
Kelas-kelas Stream
STREAM BYTE STREAM KARAKTER
BufferedReader
BufferedInputStream
BufferedWriter
BufferedOutputStream CharArrayReader
ByteArrayInputStream CharArrayWriter
ByteArrayOutputStream FileReader
DataInputStream FileWriter
FilterReader
DataOutputStream
FilterWriter
FileInputStream InputStreamReader
FileOutputStream LineNumberReader
FilterInputStream OutputStreamWriter
FilterOutputStream PipedReader
PipedWriter
InputStream
PrintWriter
OutputStream Reader
PipedInputStream StringReader
PipedOutputStream StringWriter
Writer
PrintStream
Stream yang telah terdefinisi
Semua program java otomatis mengimport java.lang
Paket java.lang mendefinisikan kelas System yang memanggil
aspek berkaitan runtime
Contoh : Memanggil tanggal, Menuliskan sesuatu di layar, dll
Kelas System mendefinisikan 3 variabel stream : in, out, dan err.
Field atau data-data tersebut dideklarasikan sebagai public dan
static, sehingga tidak perlu dibentuk objek dari kelas System untuk
memanggilnya.
System.out mengacu pada stream output standar yang defaultnya
berupa layar console
System.in mengacu pada stream input standar, defaultnya
keyboard
System.err mengacu pada stream error standar, yang berupa layar
console
Melakukan Input
Input console dilakukan melalui pembacaan terhadap stream System.in
Objek BufferedReader merupakan objek yang membungkus System.in melalui
InputStreamReader agar memperoleh karakter yang diketik melalui keyboard dan
ditampilkan ke layar console
Constructor BufferedReader :
BufferedReader(Reader inputReader)
Reader adalah kelas abstract maka hrs ada turunannya yang konkrit :
InputStreamReader yang mengkonversi byte ke karakter
Constructor InputStreamReader
InputStreamReader(InputStream inputStream)
inputStream dapat diisi dengan System.in
Sehingga kodenya menjadi berikut :
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Ada 3 pembacaan input :
Membaca Input Data Karakter
Membaca Input Data String
Membaca Input Data Numerik
Membaca Input Data Karakter
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 + "\'");
}
}
Membaca Input Data String
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?");
}
}
Membaca Input Data Numerik
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); }}
Beberapa konversi dari String (misal:
String x)
Ke Integer :
Integer.parseint(x)
Ke Double :
Double.parseDouble(x)
Menampilkan Output
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);
}
}
Mengenal Kelas PrintWriter
Kelas ini yang direkomendasikan digunakan untuk menulis
ke layar console
System.out hanya direkomendasikan untuk melacak
kesalahan program atau menuliskan contoh program
PrintWriter adalah salah satu kelas stream yang berbasis
data karakter
Constructor :
PrintWriter(OutputStream outputStream, boolean
flushOnNewLine)
flushOnNewLine adalah parameter boolean yang
menyatakan apakah stream output akan dibuang atau tidak
setiap kali method println() dipanggil
Contoh Penggunaan 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 bertipe double : " + d);
pw.println("Data bertipe int : " + i);
pw.println("Data bertipe byte : " + b);
pw.println("Data bertipe char : " + c);
pw.println("Data bertipe string : " + s);}}
Membaca/Menulis File
Constructor yang digunakan untuk membaca:
FileInputStream(String fileName) throws FileNotFoundException
Constructor yang digunakan untuk menulis:
FileOutputStream(String fileName) throws FileNotFoundException
fileName menunjukkan file yang akan dibuka, jika file tidak ditemukan
constructor tersebut akan membangkitkan eksepsi FileNotFoundException
Jika ada file bernama sama yang eksisting maka hasil penulisan file akan
menimpa file yang eksisting
Jika sudah selesai menggunakan stream yang terhubung dengan file, maka
stream tersebut harus ditutup dengan method close().
Untuk membaca data digunakan method read(), jika data terakhir dari file
ditemukan (EOF:End Of File), maka method read() akan menghasilkan nilai
-1.
Contoh membaca File
class DemoBacaFile { // membaca data dari dalam file
public static void main(String[] // dan menampilkan hasilnya ke layar
args) { console
try {
FileInputStream finput = null;
while ((data = finput.read()) != -1) {
int data; // ketika ditampilkan, data dikonversi
// membuka file ke tipe char
try { System.out.print((char) data);}
finput = new } catch (IOException ioe) {
FileInputStream("d:/INPUT.TXT");
} catch (FileNotFoundException System.out.println(ioe.getMessage());
fnfe) { return;}
System.out.println("File tidak // menutup file
try {
ditemukan.");
finput.close();
return; // keluar dari method} } catch (IOException ioe) {}}}
Contoh Menulis File
class DemoTulisFile { // menulis data ke dalam file
public static void main(String[] args) try {
{ for (int i=0; i<data.length(); i++) {
// data akan dikonversi per karakter
FileOutputStream foutput = null; foutput.write((int) data.charAt(i));
String data = "Baris pertama }
\nBaris kedua \nBaris ketiga"; } catch (IOException ioe) {
// membuka file System.out.println(ioe.getMessage());
try { return;
foutput = new }
// menutup file
FileOutputStream("d:/OUTPUT.TX
try {
T");} catch (FileNotFoundException
foutput.close();
fnfe) {
} catch (IOException ioe) {}
System.out.println("File tidak }
dapat terbentuk."); }
return; // keluar dari method}
Mengkopi File
class DemoSalinFile { // membaca data dari file input
public static void main(String[] args) { // dan memasukkannya ke dalam file output
FileInputStream finput = null; try {
FileOutputStream foutput = null; while ((data = finput.read()) != -1) {
int data; foutput.write(data);
// membuka file input }
try {
} catch (IOException ioe) {
finput = new FileInputStream("d:/FILE1.TXT");
} catch (FileNotFoundException fnfe) { System.out.println(ioe.getMessage());
System.out.println("File input tidak return;
ditemukan"); }
return; // keluar dari method}
// membuka file output // menutup file
try { try {
foutput = new finput.close();
FileOutputStream("d:/FILE2.TXT"); foutput.close();
} catch (FileNotFoundException fnfe) {
} catch (IOException ioe) {}
System.out.println("File output tidak dapat
terbentuk");
}
return; // keluar dari method} }
Kelas File
Objek dari kelas File digunakan untuk memperoleh dan
memanipulasi informasi yang berkaitan dengan file, seperti hak
akses, waktu dan tanggal pembuatan atau modifikasi, lokasi
direktori, dsb.
Beberapa constructor yang digunakan :
File(String path)
File(String path,String namaFile)
File(File objFile,String namaFile)
Contoh penggunaan :
File file1=new File(“/java”);
File file2=new File(“/java”,”contoh.java”);
File file3=new File(file1,”contoh.java”);
Kelas File tidak hanya digunakan untuk membentuk file saja tapi
juga dapat merepresentasikan direktori
Method Pada Kelas File
Nama Method Keterangan
class DemoMembuatFileBaru {
public static void main(String[] args)
throws IOException {
File f = new File("d:/sample.txt");
f.createNewFile();
}
}
Mengubah Nama File
class DemoUbahNamaFile {
public static void main(String[] args) {
class DemoHapusFile {
public static void main(String[] args) {
File f = new File("d:/contoh.txt");
f.delete();
}
}
Menampilkan Daftar File dan Direktori
class DemoListDirektori {
public static void main(String[] args) {
String dir = "d:/javaCode";
File f = new File(dir);
String[] daftar = f.list();
java.util.Arrays.sort(daftar);
System.out.println("File dan direktori dalam D:\\javaCode");
System.out.println();
for (int i=0; i<daftar.length; i++) {
File fTemp = new File(dir + "/" + daftar[i]);
if (fTemp.isDirectory()) {
System.out.println(daftar[i] + "\t\t<DIR>");
} else {
System.out.println(daftar[i]);}}}}
Membuat Direktori Baru
class DemoMembuatDirektori {
public static void main(String[] args) {
File f = new File("d:/NewDir/NewSubDir");
f.mkdirs();
}
}