Menampilkan Waktu Secara Realtime pada JLabel


Java Programming

Java Programming

Peralatan yang diperlukan :

  1. Java Development Kit 1.6
  2. Integrated Development Environtment (NetBeans, Eclipse, dll)

Tadi ada yang bertanya bagaimana cara menampilkan waktu secara realtime di JLabel, maksudnya menampilkan waktu saat ini dalam sebuah JLabel. Jadi seiring dengan berjalannya waktu, tulisan pada JLabel ini pun akan ikut berubah, menunjukkan waktu saat ini.

Caranya tidak terlalu sulit, kita cukup membuat sebuah kelas JLabel baru 😀 Setelah itu gunakan Timer untuk membuat timer yang mengupdate tulisan pada JLabel dan juga menggunakan SimpleDateFormat untuk mengubah Date ke String agar dapat ditampilkan dalam sebuah JLabel. Baca lebih lanjut

Menggunakan JTextValidator di NetBeans IDE


NetBeans IDE 6.9

NetBeans IDE 6.9

Peralatan yang diperlukan

  1. Java Development Kit 1.6
  2. NetBeans IDE 6.9
  3. Project JTextValidator

Artikel sebelumnya saya telah membuat sebuah project JTextValidator yang merupakan JTextField yang dapat melakukan proses validasi secara dinamis dan realtime. Pada artikel ini saya akan bahas bagaimana cara menggunakannya dalam project java yang dibuat menggunakan NetBeans IDE 😀 Kenapa NetBeans? Baca saja terus artikel ini 😀 Baca lebih lanjut

Logging dalam Java, Apa dan Kenapa?


Logging? Penebangan? Haha, bukan itu maksudnya 😀

Logging yang dimaksud disini adalah cara yang sistematis dan terkendali untuk merepresentasikan keadaan tahapan-tahapan aplikasi pada saat aplikasi tersebut berjalan. Hmmm…. maksudnya? 😀

Sederhananya seperti ini, biasanya saat kita ingin mendeteksi apa yang terjadi dalam program, biasanya kita menampilkan tulisan pada console dengan perintah :

System.out.println(“isi informasi”);

misal, kita membuat program penjualan, biasanya agar kita mengetahui apa yang terjadi dalam program kita menyelipkan informasi logging seperti :

“membuat barang baru”
“barang baru berhasil dibuat”
“mengambil data barang dari database”

dan sebagainya, sesuai dengan yang kebutuhan kita 😀 Hal inilah yang dinamakan logging, artinya logging ini cara yang biasa kita gunakan untuk merepresentasikan keadaan tahapan-tahapan aplikasi yang sedang berjalan, tujuan dilakukan proses logging ini tentunya agar kita tau apa yang terjadi dalam program, sehingga jika ada kesalahan dalam program kita bisa mengetahuinya 😀

Kenapa Perlu Teknologi Lain?

kalo kita bisa menggunakan logging menggunakan perintah System.out.println(), kenapa kita perlu teknologi yang lainnya?

hal ini dikarenakan target untuk System.out.println() adalah console, artinya jika kita membuat program yang berbasiskan antarmuka, maka hasil dari System.out.println() tidak akan terlihat 😀 Hal ini karena memang kita tidak menggunakan console 😀

hal ini bisa kita akali dengan cara menggunakan Java IO, sehingga kita tidak menggunakan System.out.println() lagi, melainkan menggunakan Java IO, tapi itu artinya kita harus membuat proses logging yang baru lagi 😦

atau jika kita ingin seluruh proses logging ditampilkan dalam database, maka artinya kita harus menggunakan JDBC, dan artinya lagi-lagi kita harus buat proses logging dari awal lagi 😦

hal ini membuat proses logging secara manual seperti ini sangat melelahkan…. oleh karena itu kita perlu teknologi lain untuk proses logging, namanya Java Logging!

Java Logging

java logging merupakan teknologi logging yang secara default ada dalam jdk, sehingga tidak perlu menginstall plugin atau framework apapun untuk menggunakannya. seluruh class-class java logging terdapat pada paket java.util.logging.*

secara sederhana, java logging dapat digambarkan sebagai jembatan penghubung antara aplikasi dan target lokasi logging, artinya hanya dengan menggunakan java logging, kita dapat dengan mudah mengubah target loggingnya, misal kita ingin menjadikan console sebagai target loggingnya, artinya seluruh trace logging akan ditampilkan dalam console. atau kita ingin target loggingnya ke file, maka seluruh trace logging akan disimpan dalam file. selain itu kita juga dapat menggunakan target target yang berbeda secara bersamaan menggunakan java logging.

Java Logging

Java Logging

dengan fasilitas java logging yang seperti itu, maka proses logging akan sangat menyenangkan 😀 tidak lagi membosankan dan tidak akan memakan waktu lama 😀

Ingat! Tuliskan Seluruh Informasi Yang Diperlukan Pada Saat Membuat Logging, Agar Kita Tahu Apa Yang Sedang Terjadi Dengan Aplikasi Kita

Praktek!

misal saja kita membuat program yang sederhana, yaitu melakukan perulangan 0 sampai 9 😀

package khannedy.standard.logging;

import java.util.logging.Logger;

public class SimpleLogging {

	public static void main(String[] args) {
		Logger logger = Logger.getLogger("Eko Keren :D");
		logger.info("aplikasi berjalan");

		logger.info("melakukan perulangan");
		for (int i = 0; i < 10; i++) {
			logger.info("nilai i sekarang " + i);
		}
		logger.info("perulangan selesai");

		logger.info("aplikasi selesai");
	}

}

untuk membuat logger, caranya kita menggunakan kelas java.util.logging.Logger dengan menggunakan static class getLogger(“nama logger”). Dan untuk menampilkan informasi kita bisa menggunakan metode info(“informasi”), atau untuk menampilkan warning kita bisa menggunakan metode warning(“warning”) dan yang lainnya.

jika dijalankan, maka hasil programnya adalah :

May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: aplikasi berjalan
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: melakukan perulangan
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 0
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 1
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 2
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 3
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 4
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 5
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 6
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 7
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 8
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: nilai i sekarang 9
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: perulangan selesai
May 12, 2010 11:34:41 PM khannedy.standard.logging.SimpleLogging main
INFO: aplikasi selesai

secara default target lokasinya adalah console, tapi anda bisa merubahnya dengan cara mengubah Handler-nya :

package khannedy.standard.logging;

import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Logger;

public class SimpleLogging {

	public static void main(String[] args) throws Exception {
		Logger logger = Logger.getLogger("Eko Keren :D");

		Handler handler = new FileHandler("file-log.log");
		logger.addHandler(handler);

		logger.info("aplikasi berjalan");

		logger.info("melakukan perulangan");
		for (int i = 0; i < 10; i++) {
			logger.info("nilai i sekarang " + i);
		}
		logger.info("perulangan selesai");

		logger.info("aplikasi selesai");
	}

}

dimana java logging support beberapa handler, yaitu :

  1. java.util.logging.FileHandler, ini menulis logging ke file
  2. java.util.logging.ConsoleHandler, ini menulis logging ke console
  3. java.util.logging.StreamHandler, ini menulis logging ke stream
  4. java.util.logging.MemoryHandler, ini menulis logging ke memory
  5. java.util.logging.SocketHandler, ini menulis logging ke jaringan socket menggunakan protokol TCP/IP.

bagaimana kalo kita ingin logging nya disimpan ke database?

kita bisa membuat class logging sendiri, dengan cara membuat class turunan baru dari class java.util.logging.Handler

😀

Project Pertama Google Web Toolkit 2 Tanpa Integrated Development Environment


Kemarin waktu JAMU-1 (Java Meetup) JUG-Bandung yang berisikan GWT (Google Web Toolkit) ternyata banyak yang minta untuk JAMU-2 dibahas lagi tentang GWT, khususnya teknikalnya, soalnya kemarin waktu JAMU-1 memang tidak banyak masuk ke teknikalnya alias codingnya, hanya mengenalkan apa itu GWT dan kenapa GWT.

Pada tutorial ini saya akan bahas tentang bagaimana membuat project pertama GWT versi 2 tanpa IDE (Integrated Development Environment) seperti Eclipse IDE, ataupun NetBeans IDE, artinya murti menggunakan terminal 😀

Hoho, solit dunk?

Enggak juga 😀

Instalasi Apache Ant

Untuk menggunakan GWT tanpa IDE, kita memerlukan Apache Ant sebagai Build Toolnya, kenapa perlu? Karena dengan menggunakan Apache Ant, proses build aplikasi berbasis GWT akan lebih mudah dibandingkan kita harus melakukan kompilasi secara manual satu persatu kelas yang ada dalam aplikasi yang sedang dibangun 🙂

Pertama download Apache Ant nya di :

http://ant.apache.org/

Pastikan anda mengerti setting classpath pada sistem operasi yang anda buat, karena mengetahui cara setting classpath adalah hal yang wajib untuk Java Developer 😀 . Setelah setting classpath, sekarang anda bisa melakukan akses program ant lewat terminal dengan mengetikkan :

ant -version

Dan Apache Ant akan menampilkan versi yang terinstall, misal pada sistem operasi saya hasilnya :

Apache Ant version 1.8.0 compiled on February 1 2010

Selesai, lanjutkan ke proses selanjutnya…

Instalasi Google Web Toolkit

Setelah instalasi Apache Ant selesai, saatnya instalasi Google Web Toolkit. Apaan tuh Google Web Toolkit? Cape deh…. (ngapain ngikutin tutorial ini kalo gak ngerti GWT, liat disini dulu -> http://code.google.com/intl/id/webtoolkit/)

Pertama download dulu GWT nya disini :

http://code.google.com/intl/id/webtoolkit/download.html

Setelah itu tahapannya sama seperti instalasi Apache Ant, yaitu setting classpath agar GWT bisa langsung dieksekusi dari terminal. Untuk mengecek apakah GWT sudah terinstall, ketikkan :

webAppCreator

pada terminal, maka hasilnya akan seperti ini :

Missing required argument 'moduleName'
Google Web Toolkit 2.0.3
WebAppCreator [-overwrite] [-ignore] [-out dir] [-junit pathToJUnitJar] moduleName
where
-overwrite  Overwrite any existing files
-ignore     Ignore any existing files; do not overwrite
-out        The directory to write output files into (defaults to current)
-junit      Specifies the path to your junit.jar (optional)
and
moduleName  The name of the module to create (e.g. com.example.myapp.MyApp)
Missing required argument 'moduleName'Google Web Toolkit 2.0.3WebAppCreator [-overwrite] [-ignore] [-out dir] [-junit pathToJUnitJar] moduleName
where   -overwrite  Overwrite any existing files  -ignore     Ignore any existing files; do not overwrite  -out        The directory to write output files into (defaults to current)  -junit      Specifies the path to your junit.jar (optional)and   moduleName  The name of the module to create (e.g. com.example.myapp.MyApp)

Tergantung versi GWT yang terinstall 😀

Membuat Project

Sekarang saatnya kita membaut project, untuk membuat project GWT, caranya gumakan perintah berikut :

webAppCreator   -out   HelloGWT   khannedy.gwt.HelloGWT

Dimana -out HelloGWT artinya kita akan membuat project pada folder HelloGWT, lokasi folder bisa relative seperti diatas, atau absolut seperti /home/echo/Desktop/HelloGWT/ atau C:/Proyek/HelloGWT/

Dan khannedy.gwt.HelloGWT merupakan nama kelas yang akan dijadikan sebagai kelas aplikasi dalam GWT

Hasil trace nya adalah seperti dibawah ini :

Not creating tests because -junit argument was not specified.

Created directory HelloGWT/src
Created directory HelloGWT/war
Created directory HelloGWT/war/WEB-INF
Created directory HelloGWT/war/WEB-INF/lib
Created directory HelloGWT/src/khannedy/gwt
Created directory HelloGWT/src/khannedy/gwt/client
Created directory HelloGWT/src/khannedy/gwt/server
Created directory HelloGWT/src/khannedy/gwt/shared
Created directory HelloGWT/test/khannedy/gwt
Created directory HelloGWT/test/khannedy/gwt/client
Created file HelloGWT/src/khannedy/gwt/HelloGWT.gwt.xml
Created file HelloGWT/war/HelloGWT.html
Created file HelloGWT/war/HelloGWT.css
Created file HelloGWT/war/WEB-INF/web.xml
Created file HelloGWT/src/khannedy/gwt/client/HelloGWT.java
Created file HelloGWT/src/khannedy/gwt/client/GreetingService.java
Created file HelloGWT/src/khannedy/gwt/client/GreetingServiceAsync.java
Created file HelloGWT/src/khannedy/gwt/server/GreetingServiceImpl.java
Created file HelloGWT/src/khannedy/gwt/shared/FieldVerifier.java
Created file HelloGWT/build.xml
Created file HelloGWT/README.txt
Created file HelloGWT/.project
Created file HelloGWT/.classpath
Created file HelloGWT/HelloGWT.launch
Created file HelloGWT/war/WEB-INF/lib/gwt-servlet.jar

Setelah itu masuk ke folder  HelloGWT, tergantung folder yang dibuat dengan cara menggunakan perintah :

cd HelloGWT

sekarang project GWT sederhana sudah selesai 😀

Kok? Hehehe, emang sudah selesai kok 😀

Menjalankan Aplikasi

Untuk menjalankan aplikasi, kita hanya perlu menggunakan perintah :

ant devmode

tunggu sampai form aplikasi GWT Development Mode :

GWT Development Mode

GWT Development Mode

Setelah itu klik tombol Launch Default Browser, maka browser akan membuka aplikasi GWT yang tadi kita buat :

Web Application Starter Project 1

Web Application Starter Project 1

Jika di klik tombol Send nya :

Web Application Starter Project 2

Web Application Starter Project 2

Mudah kan? tapi ingat, ini adalah Development Mode, artinya bukan Production Mode. Jadi kalo aplikasi kita sudah jadi, bukan seperti ini cara menjalankannya 😀

Production Mode

Anggap saja kita sudah membuat aplikasi dan siap untuk dipublikasi alias diproduksi (production mode), maka tahapan sebelumnya bukanlah cara menjalankan aplikasinya.

Hasil dari GWT adalah WAR (Web Archive), dimana WAR dapat dideploy di server-server java seperti Apache Tomcat, Glassfish dan server Java yang lainnya, dan untuk membuat aplikasi GWT kita agar menjadi WAR, caranya mudah tinggal gumakan perintah :

ant war

maka sekarang akan terbuat file WAR dalam folder project yang tadi dibuat, dalam kasus ini file WAR yang ada pada project saya adalah HelloGWT.war 😀

Mudah kan?

Tanda IDE lagi 😀

Partial Class, Fitur Aneh di C#


Saya bilang aneh, karena memang saya adalah orang Java 😀

Di Java, gak mungkin kita bisa membuat sebuah kelas dalam berkas yang berbeda, bahkan untuk membuat kelas public, dalam Java harus sama dengan nama berkasnya. Namun berbeda dengan di C#, ternyata nama berkas tidak harus sama dengan nama kelas public, bahkan ada yang namanya Partial Class, yaitu kelas yang dapat dibuat di beberapa berkas, aneh kan? 😀

Lantas untuk apa? Bukan kah ini malah membingungkan pengembang? Enggak juga 😀 Tergantung kebiasaan, jika terbiasa dengan Java seperti saya, mungkin bisa dibilang iya, fitur ini membingungkan 😀 Tapi ternyata ada juga saat-saat kita membutuhkan Partial Class

  1. Saat kelas yang kita buat itu sudah terlalu panjang, misal lebih dari 1000 baris
  2. Saat kita mau membuat kode sengaja dibuat untuk membingungkan orang yang baca kode kita 😀 (heheh, ini ide saya lho)

Misal dalam berkas Panjang.cs kita buat kode seperti ini :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Learning.Partial
{
public partial class Panjang
{
public void MetodeSatu()
{
}
}
}

Setelah itu kita buat kode dalam berkas PanjangLanjutan.cs seperti ini :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Learning.Partial
{
public partial class Panjang
{
public void MetodeDua()
{
}
}
}

Hahah, pendek? Ya anggap aja itu kode yang sangat panjang 😀 . Dengan seperti itu, kita dapat menjalankan kelas tersebut secara bersamaan, seperti dibawah ini :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Learning.Partial;
namespace Learning
{
class Program
{
static void Main(string[] args)
{
Panjang panjang = new Panjang();
panjang.MetodeSatu();
panjang.MetodeDua();
}
}
}

Hmm, ternyata cukup mudah juga y 😀
Haha!!!!!

Untuk lebih jelas, silahkan liat tautan dibawah ini :

  1. Partial Classes and Methods (C# Programming Guide)

Membuat Download Manager Menggunakan Java untuk Mengunduh Seluruh Gambar yang Ada di WordPress


sebenarnya kita tidak perlu membuat download manager sendiri untuk mengunduh gambar-gambar di halaman web. banyak sekali download manager yang sudah ada. namun yang menjadi masalah adalah saat ini kebanyakan yang diunduh adalah link bukan image, jadi tag lah yang didownload, sedangkan jika gambarnya dalam biasanya tidak didownload.

kenapa tidak menggunakan mirror? wew, yang saya inginkan itu cuma gambarnya, bukan seluruh websitenya 😀 So? Saatnya membuat download manager sendiri 😀

Pengetahuan yang Diperlukan

pengetahuan yang diperlukan untuk membuat download manager sebuah website adalah :

  1. tau cara nge-crawl halaman-halaman website
  2. tau cara nge-parsing halaman html
  3. tau cara mendownload berkas dari internet
  4. tau pemetaan lokasi link-link pada website yang akan didownload 😀

karena saya mau mendownload seluruh gambar yang ada di wordpress, jadi kita harus tau bagaimana pemetaan website di wordpress 😀

  1. pertama! setiap blog di wordpress itu memiliki halaman dari halaman 1 sampai terakhir, dan penulisannya adalah seperti ini : http://namablog.wordpress.com/page/1/ dan seterusnya…
  2. kedua! pada setiap halaman terdapat artikel-artikel, dan biasanya banyaknya artikel pada setiap halaman tergantung pengaturan pemilik blog itu 😀
  3. ketiga! penamaan link artikel pada wordpress adalah sebagai berikut : http://namablog.wordpress.com/2010/04/07/judul-artikel/ dimana untuk 2010 adalah tahun pembuatan artikel, untuk 04 adalah bulan pembuatan, untuk 07 adalah tanggal pembuatan dan untuk judul-artikel adalah judul artikelnya pastinya 😀
  4. jadi untuk mengunduh seluruh gambar yang ada di wordpress, pertama kita harus dapatkan lokasi link artikel dengan cara menelusuri halaman, setelah dapat semua linknya, baru cari tag yang berisikan gambar 😀

jadi seperti ini  kode program yang harus dibuat :

package khannedy.wordpress.image.downloader;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Logger;
import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

/**
 *
 * @author echo
 */
public class Downloader {

    private Logger log;

    private final String downloadUrl;

    private final String downloadTarget;

    private final int first;

    private final int last;

    /**
     * Membuat Downloader
     * @param downloadUrl url wordpress
     * @param downloadTarget target disimpan gambar
     * @param first
     * @param last
     */
    public Downloader(String downloadUrl, String downloadTarget, int first, int last) {
	if (!downloadUrl.endsWith("/")) {
	    downloadUrl += "/";
	}
	this.downloadUrl = downloadUrl;
	this.downloadTarget = downloadTarget;
	this.log = Logger.getLogger(Downloader.class.getName());

	this.first = first;
	this.last = last;
    }

    /**
     * untuh semua halaman
     * @return
     */
    protected Set downloadPage() {
	Set set = new HashSet();
	int index = first;
	int i = 0;
	while (true) {
	    if (index > last) {
		break;
	    }
	    try {
		String target = downloadUrl + "page/" + index + "/";
		URL url = new URL(target);
		log.info("memproses halaman " + url);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.3");
		connection.connect();
		if (connection.getContentType().startsWith("text/html")) {
		    DOMParser parser = new DOMParser();
		    parser.parse(new InputSource(connection.getInputStream()));
		    Document document = parser.getDocument();
		    NodeList list = document.getElementsByTagName("a");
		    boolean valid = true;
		    for (i = 0; i < list.getLength(); i++) { 			valid = true; 			Node node = list.item(i); 			Node node1 = node.getAttributes().getNamedItem("href"); 			String href = node1.getNodeValue(); 			if (href.startsWith(downloadUrl)) { 			    if (!href.contains("#")) { 				String replace = href.replace(downloadUrl, "").replace("/", ""); 				if (replace.length() > 8) {
				    String number = replace.substring(0, 8);
				    char[] array = number.toCharArray();
				    for (char c : array) {
					if (!Character.isDigit(c)) {
					    valid = false;
					    break;
					}
				    }
				    array = null;
				    number = null;
				} else {
				    valid = false;
				}
				replace = null;
			    } else {
				valid = false;
			    }
			} else {
			    valid = false;
			}
			if (valid) {
			    set.add(href);
			} else {
			    href = null;
			}
		    }
		    list = null;
		}
		connection.disconnect();
		connection = null;
		url = null;
		target = null;
		System.gc();
		index++;
	    } catch (Throwable t) {
		break;
	    }
	}
	return set;
    }

    /**
     * unduh semua gambar
     * @param articleUrl
     * @return
     */
    protected Set downloadArticle(String articleUrl) {
	Set set = new HashSet();
	int i = 0;
	try {
	    URL url = new URL(articleUrl);
	    log.info("memproses artikel " + articleUrl);
	    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
	    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.3");
	    connection.connect();
	    if (connection.getContentType().startsWith("text/html")) {
		DOMParser parser = new DOMParser();
		parser.parse(new InputSource(connection.getInputStream()));
		Document document = parser.getDocument();
		NodeList list = document.getElementsByTagName("img");
		for (i = 0; i < list.getLength(); i++) {
		    Node node = list.item(i);
		    Node node1 = node.getAttributes().getNamedItem("src");
		    String href = node1.getNodeValue();

		    String replace = articleUrl.replace(downloadUrl, "").replace("/", "");

		    Gambar gambar = new Gambar();
		    gambar.setLokasi(href);
		    gambar.setFolder(replace.substring(0, 8));
		    gambar.setSubFolder(replace.substring(8));

		    set.add(gambar);

		    replace = null;
		}
		list = null;
	    }
	    connection.disconnect();
	    connection = null;
	    url = null;
	    System.gc();
	} catch (Throwable t) {
	}

	return set;
    }

    /**
     * simpan gambar ke disk
     * @param gambar
     */
    protected void downloadImag(Gambar gambar) {
	try {
	    URL url = new URL(gambar.getLokasi());
	    log.info("mengunduh gambar " + gambar.getLokasi());
	    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
	    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.3");
	    connection.connect();

	    if (connection.getContentType().startsWith("image")) {
		InputStream inputStream = connection.getInputStream();

		File folder = new File(new File(downloadTarget, gambar.getFolder()), gambar.getSubFolder());
		folder.mkdirs();

		FileOutputStream outputStream = new FileOutputStream(new File(folder, gambar.getNama()));

		byte[] buffer = new byte[1042 * 8];
		int length = 0;

		while ((length = inputStream.read(buffer)) != -1) {
		    outputStream.write(buffer, 0, length);
		}

		outputStream.close();
	    }

	    connection.disconnect();
	    connection = null;
	    url = null;
	    System.gc();
	} catch (Throwable t) {
	}
    }

    /**
     * memulai download
     */
    public void start() {
	Set articles = downloadPage();
	Set images = new HashSet();

	log.info("mengunduh seluruh halaman...");
	for (String string : articles) {
	    images.addAll(downloadArticle(string));
	}

	log.info("mengunduh seluruh gambar...");
	for (Gambar gambar : images) {
	    downloadImag(gambar);
	}

	log.info("selesai...");
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package khannedy.wordpress.image.downloader;

/**
 *
 * @author echo
 */
public class Gambar {

    private String folder;

    private String subFolder;

    private String lokasi;

    private String nama;

    public String getNama() {
	return nama;
    }

    public void setNama(String nama) {
	this.nama = nama;
    }

    public String getFolder() {
	return folder;
    }

    public void setFolder(String folder) {
	this.folder = folder;
    }

    public String getLokasi() {
	return lokasi;
    }

    public void setLokasi(String lokasi) {
	this.lokasi = lokasi;
	this.nama = lokasi.substring(lokasi.lastIndexOf("/") + 1);
    }

    public String getSubFolder() {
	return subFolder;
    }

    public void setSubFolder(String subFolder) {
	this.subFolder = subFolder;
    }

    @Override
    public boolean equals(Object obj) {
	if (obj == null) {
	    return false;
	}
	if (getClass() != obj.getClass()) {
	    return false;
	}
	final Gambar other = (Gambar) obj;
	if ((this.lokasi == null) ? (other.lokasi != null) : !this.lokasi.equals(other.lokasi)) {
	    return false;
	}
	return true;
    }

    @Override
    public int hashCode() {
	int hash = 3;
	hash = 71 * hash + (this.lokasi != null ? this.lokasi.hashCode() : 0);
	return hash;
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package khannedy.wordpress.image.downloader;

/**
 *
 * @author echo
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

	// melakukan pengecekan argumen
	if (args.length < 2) { 	    // terjadi kesalahan argumen, beri tahu cara penggunaan 	    System.out.println("Argumen salah...\n\n" 		    + "Gunakan :\n" 		    + "java -jar wordpress-image-downloader.jar [url] [target] [first] [last]\n" 		    + "  [url]      : url wordpress, misal https://eecchhoo.wordpress.com/\n" 		    + "  [target]   : lokasi target gambar disimpan, misal : /home/echo/Desktop/target/\n" 		    + "  [first]    : halaman pertama (default 1)\n" 		    + "  [last]     : halaman terakhir (default Integer.MAX_VALUE)\n\n" 		    + "Bye...\n"); 	} else { 	    int first = 1; 	    int last = Integer.MAX_VALUE; 	    if (args.length >= 3) {
		first = Integer.parseInt(args[2]);
		if (first < 1) { 		    first = 1; 		} 	    } 	    if (args.length >= 4) {
		last = Integer.parseInt(args[3]);
	    }

	    new Downloader(args[0], args[1], first, last).start();
	}

    }
}

penjelasannya? duh saya lagi males ngejelasin tahapan-tahapannya 😀

intinya untuk mengerti kode-kode diatas, anda harus tau :

  1. Java Networking, untuk koneksi ke websitenya
  2. Java IO, untuk proses streaming nya
  3. NecoHTML, untuk parsing HTML nya 😀

untuk aplikasi yang sudah jadi silahkan download sisini :

DOWNLOAD

cara penggunaannya cukup ketikkan :

java -jar wordpress-image-downloader.jar [url] [target] [first] [last]

dimana :

  1. [url] adalah halaman blog wordpress, misal https://eecchhoo.wordpress.com/
  2. [target] adalah lokasi folder tempat gambar disimpan misal : /hom/echo/Desktop/Wordpress/
  3. [first] halaman awal (default 1)
  4. [last] halaman akhir (default Integer.MAX_VALUE)

contohnya :

java -jar wordpress-image-downloader.jar https://eecchhoo.wordpress.com/ /home/echo/Desktop/Wordpress/ 1 2

artinya saya mendownload seluruh gambar yang ada di blog https://eecchhoo.wordpress.com/ pada halaman 1 sampai 2 dan disimpan di disk yang beralamatkan di /home/echo/Desktop/Wordpress/

hasilnya, seluruh gambar akan terdownload seperti terlihat pada gambar dibawah ini :

Request Artikel Yang Akan Datang


Inginnya sih setiap hari update blog terus, biar bisa berbagi terus, cuma terkadang bingung mau bikin artikel apa 😦

Jadi dari situ saya berencana memberi tahu artikel-artikel yang akan datang, yang akan saya buat. Atau temen-temen juga bisa ngasih ide untuk artikel yang akan datang 😀

Silahkan kungjung link dibawah ini :

https://eecchhoo.wordpress.com/request-artikel/

Mari Berbagi!