PEMROGRAMAN JARINGAN – MODUL 3 STREAM Pemrograman Jaringan selalu melakukan input dan output: memindahkan byte data dari satu sistem ke sistem lain. Data yang dibaca dari server yang mengirim data tidak berbeda dengan membaca data dari sebuah file. Java mengangani I/O secara berbeda dari bahasa-bahasa pemrograman yang lainnya. Input/Output dalam Java dipaketkan dalam java.io. Selain kelas-kelas, paket ini juga mengandung interface yang menangani aliran (stream) data output dan input. Data tersebut tersimpan dalam file, memori, disk bisa dalam bentuk suara, gambar, maupun karakter. Kelas java.io.Output Stream adalah: public abstract class OutputStream Sedangkan method-method nya adalah: public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException public void write(byte[] data, int offset, int length) throws IOException public void flush( ) throws IOException public void close( ) throws IOException public static void generateCharacters(OutputStream out) throws IOException { int firstPrintableCharacter = 33; int numberOfPrintableCharacters = 94; int numberOfCharactersPerLine = 72; int start = firstPrintableCharacter; while (true) { /* infinite loop */ for (int i = start; i < start+numberOfCharactersPerLine; i++) { out.write(( (i-firstPrintableCharacter) % numberOfPrintableCharacters) + firstPrintableCharacter); } out.write('\r'); // carriage return out.write('\n'); // linefeed start = ((start+1) - firstPrintableCharacter) % numberOfPrintableCharacters + firstPrintableCharacter; } } Kelas java.io.InputStream adalah: public abstract class InputStream Sedangkan method-methodnya adalah: public abstract int read( ) throws IOException public int read(byte[] input) throws IOException public int read(byte[] input, int offset, int length) throws IOException public long skip(long n) throws IOException public int available( ) throws IOException public void close( ) throws IOException Kelas stream pada java.io dibagi menjadi 2 bagian: W Character stream. W Byte stream.. Byte Stream Kelas dan interface ini digunakan untuk menangani data biner. Secara hirarki terdapat struktur kelas sebagai berikut: Input Stream ByteArrayInputStream InputStream FileInputStream PipedInputStream FilterInputStream SequenceInputStream ObjectInputStream StringBufferInputStream LineNumberInputStream DataInputStream BufferedInputStream PushbackInputStream Output Stream OutputStream FileOutputStream PipedOutputStream FilterOutputStream ObjectOutputStream DataOutputStream ByteArrayOutputStream PrintStream BufferedOutputStream Character Stream Kelompok kelas ini digunakan untuk menangani proses baca tulis karakter Unicode. Kelas ini merupakan pengembangan dari kelas Byte Stream sehingga lebih efisien. Terdiri dari 2 kelas: Reader Reader PipedReader BufferedReader CharArrayReader InputStreamReader StringReader FilterReader LineNumberReader FileReader PushbackReader Writer Writer PrintWriter BufferedWriter CharArrayWriter OutputStreamWriter PipedWriter StringWriter FilterWriter FileWriter Stream Standard Kelas java.lang berkaitan standar input, output dan error. System.in merupakan objek dari InputStream dan System.out dan System.err merupakan objek dari PrintStream. Dalam java cara membaca inputan dari keyboard adalah menggunakan System.in. Agar mempermudah proses maka obyek System.in dibungkus dengan obyek BufferedReader dengan cara: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Kita telah memperoleh obyek untuk menangani aliran karakter (character stream) yang memiliki method-method seperti misalnya read() untuk membaca inputan karakter. Jika mencapai end of stream maka akan menghasilkan nilai -1. Contoh: import java.io.* class BacaKarakter(){ public static void main(String[] args){ char c; try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println(“Masukkan karakter (akhiri dengan ‘q’) : “); do { c = (char) br.read(); System.out.println(“Karakter terbaca : “+c); } while (c != ‘q’); } catch(IOException e){ System.out.println(“Ada error IO”); System.exit(0); } } } Untuk membaca String (menggunakan try … catch … ) import java.io.* class BacaString(){ public static void main(String[] args){ String str; try{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println(“Masukkan karakter (akhiri dengan \”end\”) : “); do { str = br.readLine(); System.out.println(“Karakter terbaca : “+c); } while (c != ‘q’); } catch(IOException e){ System.out.println(“Ada error IO”); System.exit(0); } } } Kenapa menggunakan try catch? Karena operasi I/O dalam java harus melemparkan Exception, yaitu IOException. Untuk membaca String (menggunakan throws exception) import java.io.* class BacaString(){ public static void main(String[] args) throws IOExcpetion{ String str; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println(“Masukkan karakter (akhiri dengan \”end\”) : “); do { str = br.readLine(); System.out.println(“Karakter terbaca : “+c); } while (c != ‘q’); } } Cara menampilkan Output ke Layar Cara menampilkan Output ke layar adalah dengan menggunakan System.out.print() atau System.out.println(). Cara membaca String dan kemudian mengkonvertnya ke dalam tipe data numerik lain Kita tetap menggunakan perintah : BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int panjang = new Integer.parseInt(str); int lebar = new Integer(str).intValue(); Untuk menkonvert dari numerik ke String: int i = 100; String str = new String.valueOf(i); Operasi File Di dalam java operasi file menggunakan kelas java.io.File. Kelas ini memiliki konstruktor umum yaitu: File(String namafile). Sedangkan method-method umumnya adalah: - public public public public public public public public public public public public boolean canRead() boolean canWrite() boolean createNewFile() boolean delete() boolean exists() boolean isFile() boolean isDirectory() long lastModified() long length() boolean mkdir() boolean mkdirs() boolean renameTo(File newfilename) Dan masih banyak lagi yang bisa dilihat di javadoc Contoh program: import java.io.*; class cobaFile{ public static void main(String[] args) throws IOException { if(args.length != 1){ System.out.println("Usage : java cobaFile <filename>"); System.exit(1); } File f = new File(args[0]); System.out.println("Nama : "+f.getName()); if(f.exists()) System.out.println("File sudah ada!"); else { System.out.println("File belum ada, buat baru…"); if(f.createNewFile()) System.out.println("Pembuatan selesai"); else { System.out.println("Pembuatan gagal!"); System.exit(0); } } System.out.println("File dapat dibaca ? "+f.canRead()); System.out.println("File dapat ditulisi ? "+f.canWrite()); System.out.println("File adalah file ? "+f.isFile()); System.out.println("File adalah direktori ? "+f.isDirectory()); java.util.Date d = new java.util.Date(f.lastModified()); System.out.println("Last modified : "+d.toString()); System.out.println("File size : "+f.length()); } } Contoh untuk mengganti nama file (rename file): import java.io.*; class cobaFile2{ public static void main(String[] args) { if(args.length != 2){ System.out.println("Usage : java cobaFile2 <source> <dest>"); System.exit(1); } File f = new File(args[0]); if(f.renameTo(new File(args[1]))) System.out.println(“Success!”); else System.out.println(“Failed!”); } } Contoh untuk membuat direktori: import java.io.*; class cobaFile3{ public static void main(String[] args) { if(args.length != 1){ System.out.println("Usage : java cobaFile3 <dir>"); System.exit(1); } File f = new File(args[0]); if(f.mkdir()) System.out.println(“Success!”); else System.out.println(“Failed!”); } } Contoh membaca file: import java.io.*; class cobaFile4{ public static void main(String[] args) { if(args.length != 1){ System.out.println("Usage : java cobaFile4 <filetoread>"); System.exit(1); } try{ FileReader f = new FileReader(args[0]); BufferedReader r = new BufferedReader(f); String s = null; while((s=r.readLine())!=null){ System.out.println(s); } r.close(); f.close(); } catch(FileNotFoundException e){ System.out.println(“File not found!”); System.exit(1); } catch(IOException e){ System.out.println(“IO Error!”); System.exit(1); } } } Contoh menulis ke file: import java.io.*; class cobaFile5{ public static void main(String[] args) { if(args.length != 1){ System.out.println("Usage : java cobaFile5 <filetowrite>"); System.exit(1); } try{ FileWriter f = new FileWriter(args[0]); BufferedWriter r = new BufferedWriter(f); String s = “percobaan menulis 1 2 3 4 sukses!”; r.write(s); r.close(); f.close(); } catch(IOException e){ System.out.println(“IO Error!”); System.exit(1); } } }