Java Lanjutan

Konsep Graphical User Interface (GUI) di Java
API untuk Aplikasi GUI di Java

  • AWT (Abstract Window Toolkit). Library dan komponen GUI (java.awt) yang pertama kali diperkenalkan oleh Java, Sun tidak merekomendasikan lagi penggunaan komponen GUI dari AWT. Program Java yang dapat berjalan di atas browser, yang dapat membuat halaman HTML lebih interaktif. Ketika sebuah Java applet dibuat, semua pernyataan Java yang terkandung di dalam kode sumbernya akan dikompilasi menjadi Java bytecode, yakni sebuah bahasa mesin semu (virtual engine/machine language) yang dibentuk oleh Java. Berkas yang berisi Java bytecode ini akan disimpan sebagai sebuah berkas kelas Java (Java class file) di dalam sebuah Web server, seperti halnya Apache HTTP Server atau Microsoft Internet Information Services (IIS). Sebuah halaman Web yang hendak menggunakan applet tersebut harus menggunakan tag … di dalam kode sumber-nya. Ketika sebuah penjelajah Web milik klien melakukan request kepada halaman Web tersebut dan menemukan bahwa di dalamnya terdapat tag …, bytecode di dalam Java class file akan dieksekusi oleh mesin semu di dalam jendela penjelajah Web, yang dapat berupa Microsoft Java Virtual Machine atau Java Runtime Engine dari Sun Microsystems.
  •  Swing or JFC (Java Foundation Class). Library dan komponen GUI (javax.swing) terbaru dari Java dan yang direkomendasikan Sun untuk pemrograman GUI. Komponen Swing sebagian besar adalah turunan AWT dan lebih lengkap daripada AWT

Fitur Swing:

  • Komponen GUI Lengkap: button, listbox, combobox, textarea, dsb
  • Pluggable Look-and-Feel: tampilan GUI dapat diubah sesuai dengan kehendak (tidak perlu mengikuti native sistem operasi)
  • Data Transfer Antar Komponen: drag and drop, copy and paste
  • Internationalization: proses desain aplikasi yang memungkinkan aplikasi dijalankan sesuai dengan preferensi tanpa rekompilasi
  • Localization: proses translasi teks ke bahasa lokal dan menambahkan komponen lokal

Komponen Swing

  • Top-Level Container: kontainer dasar dimana komponen lainnya diletakkan (JFrame, JDialog dan Applet)
  • Intermediate Container: kontainer perantara dimana komponen lainnya diletakkan
    (JPanel, JScrollPane, JTabbedPane, JToolbar, JSplitPane)
  • Atomic Component: komponen yang memiliki fungsi spesifik dan menerima interaksi langsung dari user (JButton, JLabel, JTextArea, dsb)
  • Layout Manager: mengatur tata letak dan posisi komponen dalam kontainer (BorderLayout, BoxLayout, FlowLayout, GridBagLayout, GridLayout)
  • Event Handling: menangani event yang dilakukan user (klik mouse, ketik keyboard, perbesar frame, dsb)

Top-Level Container(JFrame, JDialog, Applet)
JFrame
//1. Create the frame
JFrame frame = new JFrame("Frame Beraksi");
//2. Optional: What happens when the frame closes?
frame.setDefaultCloseOperation(JFrame.EXIT_ N_CLOSE);
//3. Create components and put them in the frame
//…create emptyLabel…
frame.getContentPane().add(emptyLabel , BorderLayout.CENTER);
//4. Size the frame
frame.pack();
//5. Show it
frame.setVisible(true);

Intermediate Container
Menu
Atomic Component
Fitur Standard Jcomponent

  • Tool Tips: setToolTipText()
  • Painting and Borders: setBorder(), paintComponent()
  • Pluggable Look and Feel: UIManager.setLookAndFeel()
  • Properties: putClientProperty(), getClientProperty()
  • Layout: setMinimumSize(), setMaximumSize, setAlignmentX()
  • Drag and Drop: component .setDragEnabled(true)
  • Double Buffering: untuk menghaluskan gambar
  • Key Bindings: untuk mnemonics dan accelerators

Layout Manager
Jenis Layout Manager

  1. Border Layout
  2. Flow Layout
  3. Grid Layout
  4. Grid Bag Layout
  5. Box Layout
  6. Card Layout

Penanganan Kejadian(Event Handling)
Event adalah kejadian atau peristiwa yang dilakukan oleh user terhadap user interface menggunakan peralatan mouse dan keyboard. Setiap objek dapat dinotifikasi jika suatu event terjadi sehingga objek tersebut dapat memutuskan apa yang harus dilakukan untuk menanggapi (menangani) event tersebut (event handling). Agar suatu objek dapat dinotifikasi tentang suatu event, objek harus mendaftarkan diri sebagai event listener ke sumber yg menghasilkan event, dan mengimplementasikan interface listener yg sesuai.
Proses Penanganan Event (Kejadian)

  • Komponen harus didaftarkan sebagai pendengar (listener) dg menggunakan method addXXXListener()

                JButton tombolSelesai = new JButton(“Selesai”); tombolSelesai.addActionListener(this);

  • Meng-implementasi interface listener atau meng-extends class adapter (bisa juga dengan membuat inner class)

    a. class HelloGUI implements MouseListener{}
    b. class HelloGUI extends MouseAdapter{} atau class HelloGUI extends JFrame{ class handler extends MouseAdapter{}}

  •  Menuliskan code penangan event pada method handler            
    MouseAdapter{
    public void mouseClicked(MouseEvent e){
    //code penangan kejadian
    }             
    }

Listener Yang Sering Digunakan

Kategori

Interface

Method

Action

ActionListener

actionPerformed(ActionEvent)

Item

ItemListener

itemStateChanged(ItemEvent)

Mouse

MouseListener

mouseClicked(MouseEvent)

mouseEntered(MouseEvent)

mouseExited(MouseEvent)

mousePressed(MouseEvent)

mouseReleased(MouseEvent)

Mouse Motion

MouseMotionListener

mouseDragged(MouseEvent)

mouseMoved(MouseEvent)

Key

KeyListener

keyPressed(KeyEvent)

keyReleased(KeyEvent)

keyTyped(KeyEvent

Focus

FocusListener

focusGained(FocusEvent)

focusLost(FocusEvent)

Window

WindowListener

windowClosing(Windowevent)

windowOpened(Windowevent)

windowActived(Windowevent)

windowDeactived(Windowevent)

Penanganan Eksepsi
Eksepsi adalah kondisi abnormal yang terjadi pada saat suatu perintah dieksekusi. Ketika eksepsi terjadi pada suatu method, ada dua pilihan yang dapat dilakukan:

    1. Menangani sendiri eksepsi
    2. Meneruskannya ke luar (throw)

Keyword eksepsi:
try, catch, finally, throw,throws
Bentuk Penanganan Eksepsi
try{
// code yg mengakibatkan eksepsi
}catch(TipeEksepsi1 objekEksepsi){
// code utk menangani eksepsi yg cocok dg TipeEksepsi1
}

catch(TipeeksepsiN objekEksepsi){
// code utk menangani eksepsi yg cocok dg TipeEksepsiN
}finally{
//code yg pasti dieksekusi setelah blok try-catch dieksekusi
}

3 Tipe Eksepsi

  1. Eksepsi yang Tidak Dicek
  2. Error
  3. Eksepsi yang Dicek

Tipe Eksepsi Yang Tidak Dicek

  • Semua eksepsi bertipe RuntimeException dan turunannya tidak harus secara eksplisit ditangani dalam program. Contohnya: ArrayIndexOutofBoundException, AritmeticException, dsb
  • Program dengan eksepsi ini tetap dapat dikompilasi, meskipun ketika dijalankan akan mengeluarkan pesan eksepsi dan eksekusi berakhir
  • Supaya eksekusi tidak berakhir, bisa menggunakan blok try-catch
	class DemoEksepsi{
		public static void main(String[] args){
			int[] arr = new int[1];
			System.out.println(arr[1]);
		}
	}

Tipe Eksepsi Error

  • Tipe eksepsi yang seharusnya tidak ditangani dengan blok try-catch karena berhubungan dengan Java runtime system
  • Error merupakan eksepsi yang sangat kritis dan tidak perlu ditangani oleh program kita

Tipe Eksepsi Yang Dicek

  • Semua eksepsi yang bukan turunan class RuntimeException adalah eksepsi yang harus ditangani dengan blok try-catch
  • Program tidak bisa dikompilasi apabila eksepsi tidak ditangani

	class DemoEksepsi2{
		Public static void main(String[] args){
			File myFile = new File(“test.txt”);
			myFile.createNewFile();
		}
	}

	
class DemoEksepsi3{
		public static void main(String[] args){
			try{
				File myFile = new File("test.txt");
				myFile.createNewFile();
				System.out.println("File berhasil dibuat");

			}catch(IOException e){
			 	System.out.println(“File gagal dibuat");
			}
		}
	}

Mengapa Eksepsi Perlu Ditangani

  • Kita ingin program kita bisa memperbaiki kesalahan akibat eksepsi dan terus melanjutkan eksekusi seolah-olah tidak pernah terjadi eksepsi
  • Pengguna program(software) umumnya tidak peduli (mengerti) bagaimana sebuah program dieksekusi sehingga akhirnya muncul pesan kesalahan. Kita ingin pesan kesalahan tadi dipahami oleh pengguna
  • Kita ingin program tetap berjalan dan bukannya dihentikan pada saat eksepsi terjadi

Catch Bertingkat

  • Code yang ada dalam blok try bisa saja mengakibatkan lebih dari satu jenis eksepsi
  • Kita dapat menuliskan lebih dari satu blok catch untuk setiap blok try
  • Blok catch dengan tipe data subclass harus ditulis terlebih dahulu daripada tipe data superclass-nya
  • Exception adalah superclass dari ArithmeticException dan ArrayIndexOutOfBoundsException sehingga harus ditulis paling akhir

	
class DemoEksepsi4{
	 	public static void main(String[] args){
		     try{
			int x = args.length; int y = 100/x;
			int[] arr = {0,1,2,3};
			y = arr[x];
			System.out.println("Jumlah argument: " + y);
			System.out.println("Tidak terjadi eksepsi");
		     }catch(ArithmeticException e){
		 	System.out.println("Terjadi eksepsi karena pembagian dengan nol“ +
			e.getMessage());
		     }catch(ArrayIndexOutOfBoundsException e){
			System.out.println("Terjadi eksepsi karena indeks di luar kapasitas");
		     }catch(Throwable e){
			System.out.println("Terjadi eksepsi yg tidak diketahui");
		     }
		    System.out.println("Setelah blok try catch");
	  	}
	}

	
class DemoEksepsi5{
		public static void main(String[] args){
	     double BILANGAN = 100.0;
	     System.out.println("Sebelum pembagian");

		      for(int i=5; i>=0; i--){
			try{
			System.out.println(BILANGAN + "/" + i + " = ");
			System.out.println(BILANGAN/i);

			}finally{
				System.out.println("Bagian finally dijalankan");
			}
	      }
	      System.out.println("Program selesai");
		}
	}

Melontarkan Eksepsi (throw)
Keyword throw digunakan untuk melontarkan eksepsi
Bentuk:
throw variabelObjek;

	class DemoThrow{
		public static void main(String[] args){
		    RuntimeException r = new  		RuntimeException("Eksepsi RuntimeException");

	 System.out.println("Sebelum Throw");
	 throw(r);
		}
	}

throws untuk Eksepsi Method
Keyword throws digunakan untuk memberitahu bahwa suatu method ada kemungkinan menghasilkan suatu eksepsi
Bentuk:
public tipe namaMethod() throws JenisEksepsi{

}
atau
public tipe namaMethod() throws JenisEksepsi1,
JenisEksepsi2, JenisEksepsi3…{

}

class SuatuKelas{

// Method tanpa throws
public void metodeA(){
	    System.out.println(“MetodeA”);
}

// Method dengan throws
public void metodeB() throws IOException{
	      System.out.println(“MetodeB”);
	}
}

class DemoThrows{
	public static void main(String[] args){
SuatuKelas obj = new SuatuKelas();
obj.metodeA();
obj.metodeB();
	}
}

class SuatuKelas{
	public void metodeA(){
	    System.out.println("MetodeA");
}

public void metodeB() throws IOException{
	    System.out.println("MetodeB");
	}
}

public class DemoThrows{
	public static void main(String[] args){
SuatuKelas obj = new SuatuKelas();
obj.metodeA();
obj.metodeB();
	}
}

Thread dan Multithreading
Konsep Thread
Thread: sekumpulan instruksi (proses) yang dieksekusi secara independen. Multithreading: suatu kemampuan yang memungkinkan beberapa kumpulan instruksi (proses) dijalankan secara bersamaan (time slicing) dalam sebuah program. Multithreading bermanfaat untuk membuat proses yang interaktif, misalnya pada program permainan (game). Program tetap dapat menggerakkan beberapa objek sambil memberi kesempatan pengguna melakukan respon melalui mouse atau keyboard.
Penggunaan Thread

  1. Membuat class yang mengimplementasi

                interface Runnable dan method run()
class NamaClass implements Runnable{
public void run(){
… }
}

  • Membuat class yang merupakan turunan class

                Thread dan meng-override method run()
class NamaClass extends Thread {
public void run(){
… }
Kiat Memilih Penggunaan Thread
Jika perlu meng-override beberapa method milik class Thread gunakan turunan class Thread. Teknik mengimplementasi interface Runnable harus digunakan, jika kita membuat class yang merupakan turunan dari class lain. Karena java tidak mengenal multiple inheritance, teknik membuat turunan class Thread tidak bisa digunakan.

	
class Mobil implements Runnable{
		String nama;
		public Mobil(String id){
			nama = id;
	  	}
		public void run(){
			for(int i=0;i<5; i++){
				try{
					Thread.currentThread().sleep(1000);
				}catch(InterruptedException ie){
					System.out.println("Terinterupsi");
				}
				System.out.println("Thread" + nama + ": Posisi " +i);
		}}
	}
	public class ThreadBeraksi1{
		public static void main(String[] args){
		Thread m1 = new Thread(new Mobil("M-1"));
		Thread m2 = new Thread(new Mobil("M-2"));
		m1.start(); m2.start();
		}
}

	
class Mobil extends Thread{
		public Mobil(String id){
			super(id);
		}
		public void run(){
		String nama = getName();
		for(int i=0; i<5; i++){
				try{
					sleep(1000);
				}catch(InterruptedException ie){
					System.out.println("Terinterupsi");
				}
				System.out.println("Thread" + nama + ": Posisi " +i);
		}}
	}
	public class ThreadBeraksi2{
		public static void main(String[] args){
		Mobil m1 = new Mobil("M-1");
		Mobil m2 = new Mobil("M-2");
		m1.start(); m2.start();
		}
	}

Method Class Thread

Method

static Thread currentThread()

String getName()

int getPriority()

Boolean isAlive()

void join()

void join(long millis)

void join(long millis)

void run()

String setName()

static void sleep(longmillis)

static void sleep(longmillis, int nanos)

void start()

Method isAlive()
Method isAlive() digunakan untuk mengetahui apakah suatu thread masih hidup atau sudah mati.Method isAlive() memberikan nilai balik true apabila thread masih hidup dan false apabila sudah mati (return value = boolean).
Sinkronisasi
Pada berapa kondisi, proses secara bersamaan terkadang tidak memungkinkan. Contoh: proses I/O stream khususnya pada proses membaca dan menulis suatu data atau file. Proses thread pembacaan atau penulisan data menjadi tidak benar karena seharusnya data dan file tersebut berubah-ubah (sedang dibuka dan ditulis oleh thread lain). Untuk kondisi diatas perlu dilakukan proses sinkronisasi dengan menggunakan keyword synchronized.
Cara Penggunaan Synchronized

  1. Sinkronisasi pada method: mendeklarasikan suatu method dengan menggunakan keyword synchronized
  2. Sinkronisasi pada objek: menambahkan blok di bawah pada pemanggilan objek

                synchronized (objek){

}
Prioritas Thread
Method setPriority(int level) dapat dipanggil untuk menentukan prioritas dari thread. Nilai level bisa berupa bilangan bulat dari 1-10. Prioritas normal memiliki nilai level 5. Perlu dicatat bahwa tidak semua sistem operasi mendukung operasi ini, sehingga kadang pemanggilan method ini tidak memberikan efek apa-apa.

	
class Mobil extends Thread{
		public Mobil(String id){
			super(id);
		}
		public void run(){
		String nama = getName();
		for(int i=0; i<5; i++){
				System.out.println(“Thread” + nama + “: Posisi “ +i);
	}}}

	public class ThreadBeraksi6{
		public static void main(String[] args){
		Mobil m1 = new Mobil(new Mobil(“M-1”));
		Mobil m2 = new Mobil(new Mobil(“M-2”));

		m2.setPriority(8);
		m1.start(); m2.start();
	}}

I/O Stream
Apa Itu I/O Stream
Stream adalah proses membaca data dari suatu suatu sumber (input) atau mengirimkan data ke suatu tujuan (output). System.out.println() adalah contoh stream, yang berfungsi menampilkan data (informasi) ke layar
Variabel standard stream:

    • System.in (default: keyboard)
    • System.out (default: layar)
    • System.err (default: console)

Jenis I/O Stream

  1. Byte Stream
    • Untuk menulis atau membaca data biner
    • InputStream dan OutputStream adalah dua class abstrak tertinggi dari Byte Stream
  1. Character Stream
    • Untuk menulis dan membaca data karakter (unicode) 
    • Reader dan Writer adalah dua class abstrak tertinggi dari Character Stream

 1. Byte Stream
Class Turunan Byte Stream

Class

BufferedInputStream

BufferedOuputStream

ByteArrayInputStream

ByteArrayOuputStream

DataInputStream

DataOutputStream

FileInputStream

FileOutputStream

PrintStream

Method Class InputStream

Method

int available()

void close()

void mark(int readLimit)

booleanmarkSupported()

int read()

int read(byte[] b)

int read(byte[] b, int off, int len)

void reset()

long skip(long n)

Membaca Input dari Console

	class InputStreamBeraksi{
		public static void main(String[] args) throws IOException{
			byte[ ] data = new byte[10];
			System.out.println("Ketik 10 buah karakter:");
			System.in.read(data);

		System.out.println("Karakter yang anda ketik adalah:");
		for(int i=0; i<data.length; i++){
				System.out.print((char) data[i]);
			}
		}
	}

Membaca Input dari File

import java.io.*;
class FileInputStreamBeraksi{
	public static void main(String[] args) {
if (args.length==0) { System.out.println("Masukkan nama file sebagai parameter!"); }
byte data;
FileInputStream fin=null;
try{
fin = new FileInputStream(args[0]);
do{
data = byte)fin.read();
System.out.print((char)data);
		}while(data!=-1);
	}catch(FileNotFoundException e){
		System.out.println("File: " + args[0] + "tidak ditemukan.");
	}catch(IOException e){
		System.out.println("Ekspresi tidak diketahui : " + e) ;
	}finally{
		if(fin!=null){
try{ fin.close();
}catch(IOException err){ System.out.println("Ekspresi tidak diketahui : " + err);}
}}}}

Program Copy Isi File (Byte)

	
public class CopyBytes {
		public static void main(String[] args) throws IOException {
		FileInputStream in = null; FileOutputStream out = null;
		try {
			in = new FileInputStream("filesumber.txt");
			out = new FileOutputStream("filetujuan.txt");
			int c;

				while ((c = in.read()) != -1) {
					out.write(c); }
			} finally {
				if (in != null) {
					in.close(); }
				if (out != null) {
					out.close(); }
			}}}

2. Character Stream
Class Turunan Character Stream

Class

BufferedReader

BufferedWrite

CharArrayReader

CharArrayWriter

InputStreamReader

OutputStreamWriter

FileReader

FileWriter

PrintWriter

StringReader

StringWriter

Method Class Reader

Method

abstract void close()

void mark(int readAheadlimit

boolean markSupported()

int read()

int read(char[] cbuf)

abstract int read(char[] cbuf,

int off, int len)

void reset()

long skip(long n)

Membaca Input dari Console (Karakter)

class CharReaderBeraksi{
	public static void main(String[] args) throws IOException{
char data;
String str = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Ketik sejumlah karakter, akhiri dg Q");
data =(char) br.read();
while(data!='Q'){
str += data;
data = (char) br.read();
}
System.out.println("Karakter yang anda ketik: " + str);
	}
}

class LineReaderBeraksi{
	public static void main(String[] args) throws IOException{
String hasil = "";
String str;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Ketik sejumlah string dan akhiri dengan KELUAR");
str = br.readLine();
while(!str.equals("KELUAR")){
hasil += str + '\n';
str = br.readLine();
}
System.out.println();
System.out.println("String yang anda ketik: " + hasil);
	}
}


Method Class Writer

Method

abstract void close()

abstract void flush()

void write(char[] cbuf, int off, int len)

void write(int c)

void write(String str)

void write(String str, int off, int len)

Menulis Output ke Console

class OutputStreamBeraksi{
		public static void main(String[] args) throws IOException{

	byte[] data = {'a','b','c','d','e','f','g'};

	System.out.write(data,3,4);
	System.out.write('\n');
	System.out.write(data);
		}
}

Menulis Output ke File

  class FileOutputStreamBeraksi{
	public static void main (String[] args) {
if (args.length==0) {System.out.println("Error: tulis nama file!");}
byte data;
OutputStream fout=null;
try{
fout = new FileOutputStream(args[0]);
System.out.println ("Ketik data yang ingin Anda tulis ke file. Q untuk berhent");
data = (byte)System.in.read();
while(data!=(byte)'Q') {
fout.write(data);
data = (byte)System.in.read();
		}
	}catch(FileNotFoundException e) {
		System.out.println("file : " + args[0] + " tidak dapat dibuka atau dibuat.");
	}catch(IOException e) {
		System.out.println("Ekspresi tidak diketahui : " + e);
	}finally {
		if(fout!=null) {
try{ fout.close();
}catch(IOException err) { System.out.println("Ekspresi tidak diketahui : " + err);
}}}}}

Program Copy Isi File (Character)

  public class CopyBytes {
		public static void main(String[] args) throws IOException {
		FileInputStream in = null; FileOutputStream out = null;
		try {
			in = new FileInputStream("filesumber.txt");
			out = new FileOutputStream("filetujuan.txt");
			int c;

				while ((c = in.read()) != -1) {
					out.write(c); }
			} finally {
				if (in != null) {
					in.close(); }
				if (out != null) {
					out.close(); }
			}}}

Program Copy Isi File (Line)

  public class CopyLines {
public static void main(String[] args) throws IOException {
	BufferedReader inputStream = null; PrintWriter outputStream = null;

		try {
inputStream = new BufferedReader(new FileReader("filesumber.txt"));
outputStream = new PrintWriter(new FileWriter("filetujuan.txt"));
String l;
while ((l = inputStream.readLine()) != null) {
	outputStream.println(l); }
} finally {
	if (inputStream != null) {
		inputStream.close();}
	if (outputStream != null) {
		outputStream.close();}
}}}

Operasi Berkas (File) dengan Class File
Class File adalah class yang mendukung berbagai operasi yang berhubungan dengan berkas (file) dan direktori(folder). Penggunaannya misalnya untuk mengganti nama atau membuat file atau direktori. Konstruktor class File:

  • File(String nama)
  • File(String induk, String anak)
  • File(File induk, String anak)

Method Class File

Method

abstract void close()

abstract void flush()

void write(char[] cbuf, int off, int len)

void write(char[] cbuf, int off, int len)

void write(String str)

void write(String str, int off, int len)

Menampilkan Atribut File

public class InfoFile{
	public static void main(String[] args){
BufferedReader StreamTeks=new BufferedReader(new InputStreamReader (System.in));
System.out.println("Masukan nama file:"); String namaBerkas = "";
try {namaBerkas = StreamTeks.readLine();
}catch (IOException i){}
File berkas = new File(namaBerkas);
if (!berkas.exists()){ System.out.println("Berkas ini tak ada");}
if (berkas.isDirectory()) System.out.println("Direktori"
if (berkas.isFile()) System.out.println("Berkas biasa");
if (berkas.isHidden()) System.out.println("Tersembunyi");
if (berkas.canRead()) System.out.println("Bisa dibaca");
if (berkas.canWrite()) System.out.println("Bisa ditulisi");
if (berkas.canRead()) System.out.println("Bisa dibaca");
if (berkas.isAbsolute()) System.out.println("path absolut");
else System.out.println("path relatif");
System.out.println("Induk : " + berkas.getParent());
System.out.println("Path : " + berkas.getPath());
System.out.println("Path Absolut : " + berkas.getAbsolutePath());
System.out.println("Nama : " + berkas.getName());
System.out.println("Ukuran : " + berkas.length() +" byte");}}

Menghapus File

  public class HapusFile{
public static void main (String[] args) {
String namaFile = "filetujuan.txt";
try {
	FileOutputStream berkasTem = new FileOutputStream(namaFile);
	berkasTem.close();
} catch (IOException i) {}
File berkas = new File (namaFile);
if (berkas.exists()) System.out.println("Berkas " + namaFile + " ada");
else System.out.println("Berkas " + namaFile + " sudah dihapus");

berkas.delete();
System.out.println("Setelah penghapusan....");

if (berkas.exists()) System.out.println("Berkas " + namaFile + " ada");
else System.out.println("Berkas " + namaFile + " sudah dihapus");
}}

Mengganti Nama File

  public class GantiNamaFile {
	public static void main(String[] args) {
String namaFile = "FileBaru.txt";
try {
FileOutputStream berkasTem=new FileOutputStream (namaFile);
berkasTem close()
}catch (IOException i) {}

File berkasSemula= new File(namaFile);
File berkasBaru = new File("NamaBaru.txt");

berkasSemula.renameTo(berkasBaru);
System.out.println("Nama sudah diganti");
	}}

Membuat Direktori

  public class BuatDir {
	public static void main(String [] args) {

    String namaDir = "latihan";
    File dir = new File (namaDir);
    dir.mkdir();
    }
}

Mengakses Data NonSekuensial

Struktur Data dengan Java Collection Framework
Java Collection Framework
A collection  (sometimes called a container) is an object that groups multiple elements into a single unit. Collections are used to store, retrieve, manipulate, and communicate aggregate data

  • Typically, they represent data items that form a natural group, such as a poker hand (a collection of cards), a mail folder (a collection of letters), or a telephone directory (a mapping of names to phone numbers)
  • A collections framework is a unified architecture for representing and manipulating collections

All collections frameworks contain the following:

    • Interfaces: These are abstract data types that represent collections. Interfaces allow collections to be manipulated independently of the details of their representation
    • Implementations: These are the concrete implementations of the collection interfaces. In essence, they are reusable data structures
    • Algorithms: These are the methods that perform useful computations, such as searching and sorting, on objects that implement collection interfaces

Core Collection Implementation

INTERFACES

IMPLEMENTATION

 

Hash Table

Resizable Array

Tree

Linked List

Hash Table + Linked List

Set

HashSet

 

TreeSet

 

LinkedHashSet

List

 

ArrayList

 

LinkedList

 

Queue

 

 

 

 

 

Map

HashMap

 

TreeMap

 

LinkedHashMap

Object Array
Array standard yang dimiliki oleh Java API (java.util),Array memiliki method-method:

Method

Keterangan

static int binarySearch(array, key)

Pencarian nilai dalam array

boolean equals(array1, array2)

Membandingkan apakah dua array memiliki nilai sama. Bekerja pada array satu dimensi

static void sort(array)

Mengurutkan isi array

static String toString(array)

Mengubah nilai array menjadi String

Contoh Object Array

public class ArrayCari {
	public static void main(String[] args) {
      		String[] jenisKelamin = new String[3];
      		jenisKelamin[0] = "laki";
      		jenisKelamin[1] = "perempuan";
     		jenisKelamin[2] = "waria";

      		int ketemu = Arrays.binarySearch(jenisKelamin , "perempuan");     
      		if (ketemu > -1) 
          			System.out.println("Data ditemukan pada: “ + ketemu);
      		else
          			System.out.println("Data tidak ditemukan.");
   	}
    }

ArrayList
ArrayList mirip dengan array, tapi memiliki kemampuan lebih baik. Jumlah elemen dalam ArrayList dapat berubah secara fleksibel tergantung jumlah data yang ada di dalamnya. Setelah array terbentuk, data baru dapat dimasukkan di tengah-tengah, tidak harus di akhir elemen array. Isi dalam array bisa dihapus, dan index dalam array sesudahnya akan maju satu langkah untuk mengisi slot kosong tersebut.

Method

Keterangan

add(object element)

Menambahkan object ke dalam ArrayList

boolean equals(array1, array2)

Menambahkan object ke dalam index yang ditentukan

static void sort(array)

Menghapus semua elemen dalam ArrayList

static String toString(array)

Mengambil object pada index tertentu

iterator()

Mengembalikan iterator pada ArrayList

remove(int index)

Menghapus object dengan index tertentu

remove(object element)

Menghapus elemen tertentu

size()

Mengembalikan nilai berupa jumlah elemen dalam ArrayList

toArray()

Mengembalikan elemen ArrayList sebagai array object

toArray(type[] array)

Mengembalikan elemen ArrayList Sebagi array dengan tipe tertentu

Contoh ArrayList

public class ArrayAngka{
      public static void main(String[] args) {
   	ArrayList angka= new ArrayList();
  	angka.add("One");
  	angka.add("Two");
  	angka.add(3);
  	angka.add("Four");
  
	for (Object i: angka) System.out.println(i);
  	angka.set(1, "Siji");
  	angka.remove(angka.size() - 1); 
  	System.out.println(angka);
     }
}

Vector
Sama seperti ArrayList, Vector memiliki dua atribut utama: kapasitas dan penambahan kapasitas. Penambahan kapasitas menentukan berapa jumlah index yang akan ditambahkan, jika index saat ini sudah tidak mencukupi.

Method

Keterangan

void add(int index, Object element)

Memasukkan object ke dalam Vector dengan index yang ditentukan

boolean add(Object element)

Menambahkan Object ke dalam Vector. Jika berhasil nilai boolean = true

void addElement(Object element)

 

Contoh Vector

public class VectorDemo {
    public static void main(String[] args) {
        Vector newVector = new Vector();
        
        //menambahkan data vector
        newVector.add("Jakarta");
        newVector.add("Surabaya");
        newVector.add("Semarang");

        // menampilkan data vector pertama
        System.out.println("Menampilkan Data Vector:");
        System.out.println("Data Vector Pertama:"+ newVector.get(0));
        System.out.println("Data Vector Pertama:"+ newVector.firstElement());
        System.out.println("Data Vector Kedua: " + newVector.get(1));   
     
        // menampilkan data vector terakhir (ketiga)
        System.out.println("Data Vector Ketiga: " + newVector.elementAt(2));
        System.out.println("Data Vector Ketiga: " + newVector.lastElement());

        //mencari index vector dan ditampilkan
        System.out.println('\n' + "Mencari Data Vector:");        
        int idxCari = newVector.indexOf("Surabaya");
        System.out.println("Nilai Index Yang Dicari Adalah: " + idxCari);
        if (idxCari>=0)
        System.out.println("Data yang Dicari Adalah:" + newVector.get(idxCari));
        //menampilkan vector dengan perulangan dan size
        for (int i=0; i < newVector.size();i++)
        System.out.println(i + ":" + newVector.get(i));
        
        //menampilkan vector dengan iterator "for-loop"
        for (Iterator d = newVector.iterator(); d.hasNext(); ) {
                System.out.println("->" + d.next());
        }
                
        }
}

HashMap
Koleksi yang memetakan kunci (key) ke dalam nilai (value). Kunci dan nilai dalam HashMap boleh diset dengan null. HashMap tepat untuk data yang kompleks, sehingga programmer tidak harus menghafal letak index seperti pada array dan collection class sequence lainnya.

Method

Keterangan

void clear()

Menghapus semua elemen dalam HashMap sehingga ukurannya menjadi 0

boolean isEmpty()

Nilai true dikembalikan jika tidak ada elemen di dalam

int size()

Mengembalikan jumlah elemen dalam HashMap

boolean containsKey(Object key)

Nilai true dikembalikan jika key ditemukan dalam HashMap

boolean containsValue(Object value)

Nilai true dikembalikan jika value ditemukan dalam HashMap

Contoh HashMap

public class HashMapDemo {
    public static void main(String[] args) {
         HashMap map = new HashMap();
        
         //menambahkan data ke hashmap
         map.put("Nama", "Joko Bodo");
         map.put("NIM", new Integer(234567));
         map.put("Alamat", "Semarang");
        
        //menampilkan hashmap
        System.out.println("Hashmap: " + map.entrySet());
        System.out.println("Ukuran Hashmap: " + map.size());
        
        //menambahkan data ke hashmap
        map.put("Situs favorit", "ilmukomputer.com");

        //menampilkan dan melihat ukuran hashmap        
        System.out.println("Hashmap: " + map.entrySet());        
        System.out.println("Ukuran Hashmap: " + map.size());

     
        //mengecek data di hashmap 
        System.out.println("Has Key NIM?“ + 		map.containsKey("NIM"));
        
       //mendetele data di hashmap 
       System.out.println("Removed: " + 	map.remove("NIM"));    
    
       //menampilkan dan melihat ukuran hashmap        
       System.out.println("Hashmap: " + map.entrySet());        
       System.out.println("Ukuran Hashmap:" + 	map.size());
    }
}

Interface Iterator
Fasilitas pada Java API yang dapat digunakan untuk melakukan iterasi komponen-komponen dalam Koleksi. Ada tiga method yang sering digunakan dalam Iterator: hasNext(), next(), remove().

Method

Keterangan

hasNext()

Menentukan apakah masih ada sisa koleksi

next()

Mengembalikan elemen object pada koleksi. Jika sudah tidak ada elemen lagi namun berusaha diambil maka akan muncul pesan: NoSuchElementException

remove()

Menghapus elemen yang terakhir kali diakses oleh Iterator

Contoh Iterator


	while (v.hasNext()){
		Object ob = v.next();
		System.out.println(v);
	}


	for(Iterator i = v.iterator(); i.hasNext();){
		String name = (String) i.next();
		System.out.println(name);
	}

Generic
Implementasi tipe data pada koleksi. Tanpa adanya generic, tipe data berbeda-beda dapat dimasukkan dalam sebuah koleksi. Ketika data tersebut diambil, maka perlu dilakukan casting. Misal method seperti di bawah:
public boolean add (Object o){
//statements
}
Untuk pengambilan data, harus dilakukan casting tipe data:
Mahasiswa mhs = (Mahasiswa) organisasi.get();
Masalah muncul jika ada beberapa elemen yang bukan bertipe Mahasiswa, elemen lain mungkin saja ada karena semua object dapat ditambahkan dengan metode add() diatas. Tipe generic pada koleksi dapat diterapkan dengan menambahkan tanda <>. Bila kita berusaha menambahkan elemen dengan tipe data berbeda, maka akan keluar error. Dengan adanya generic, program dapat lebih handal, karena kesalahan programmer dapat dicegah.
Sorting and Searching Algorithms
Algorithms
Sudah menjadi rule-of-thumb dalam dunia programming bahwa berlaku rumus:
program = algorithm + data structure
Sorting Algorithms
Algoritma sorting adalah algoritma dasar yang paling sering digunakan. Data dalam keadaan yang sudah urut (sesuai dengan kunci pengurutan tertentu) akan memudahkan kita dalam manipulasi berikutnya. Beberapa algoritma sorting:

    • Bubble Sort
    • Merge Sort
    • Selection Sort

Bubble Sort
Pengurutan dengan membandingkan suatu elemen dengan elemen berikutnya. Jika elemen sekarang lebih besar daripada elemen berikutnya maka elemen tersebut akan ditukar. Data yang ingin diurutkan: 34, 86, 15.

  public class BubbleSort {
  public static void urutkan(int data[]){
        for(int langkah=0; langkah<data.length; langkah++){
            for(int indeks=0; indeks<data.length-1; indeks++){
                if(data[indeks]>data[indeks+1]){
                       int temp = data[indeks];
                       data[indeks] = data[indeks+1];
                       data[indeks+1] = temp;                    
                }
	     }
        }
    }    
}

  public class BubbleSortBeraksi{
   public static void main(String[] args){

        int data[] = {34, 86, 15};

        System.out.print("Data awal: ");
        for(int i=0;i<data.length;i++){
               System.out.print(data[i] + " ");
        }
        
        BubbleSort.urutkan(data);

        System.out.print('\n' + "Data hasil: ");
        for(int i=0;i<data.length;i++){
               System.out.print(data[i] + " ");
        }
        System.out.println();
    }    
}

Selection Sort
Pengurutan dengan mencari elemen berikutnya sampai elemen terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang, maka elemen tersebut akan ditukar. Data yang ingin diurutkan: 34, 86, 15

  public class SelectionSort {
    public static void urutkan(int data[]){     
        for(int langkah=0; langkah<data.length-1; langkah++){
	     int indeksTerkecil=langkah;
              for(int indeks=langkah+1; indeks<data.length; indeks++){
                if(data[indeks]<data[indeksTerkecil])
                    indeksTerkecil=indeks;
	     }
                      
            int temp=data[langkah];
            data[langkah]=data[indeksTerkecil];
            data[indeksTerkecil]=temp;
        }
    }
}

  public class SelectionSortBeraksi{
   public static void main(String[] args){

        int data[] = {34, 86, 15};

        System.out.print("Data awal: ");
        for(int i=0;i<data.length;i++){
               System.out.print(data[i] + " ");
        }
        
        SelectionSort.urutkan(data);

        System.out.print('\n' + "Data hasil: ");
        for(int i=0;i<data.length;i++){
               System.out.print(data[i] + " ");
        }
        System.out.println();
    }    
}

Merge Sort
Algoritma pengurutan dengan cara menggabungkan dua kelompok data yang sudah urut, kemudian digabung dan hasilnya adalah data yang terurut. Langkah algoritma Merge Sort :

    • Bila jumlah item yang diurutkan adalah 0 atau 1, return
    • Urutkan secara rekursif bagian pertama dan kedua secara terpisah
    • Gabungkan dua bagian yang sudah terurut tersebut ke dalam sebuah kelompok terurut

sumber :

romisatriawahono.net

id.wikipedia.org

 

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: