18 Mayıs 2014 Pazar

JSoup - Seçicilerin Kullanilmasi

Eğer az çok web geçmişiniz varsa bilirsiniz CSS kullanırken veya Javascript kullanırken elementleri etiketleri ile, verdiğimiz idler ile veya atadığımız sınıflar ile çağırıp kullanırız.

Bu derste Document, Elements ve Element sınıflarında bulunan select(String selector) metodunun kullanımını göreceksiniz.

Bu metoda birçok şekilde parametre gönderebilirsiniz. İsterseniz elementin id değerini girersiniz, isterseniz sahip olduğu classı veya etikete ait href, src gibi nitelikleri kullanarak element arayabilirsiniz. Şimdi bunları nasıl kullanacağınıza bir göz atalım.

Basit bir örnekle html sayfasındaki h1 etiketlerinin içeriğini almak istersek :

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

    public static void main(String[] args) {

        try 
        {
             Document doc = Jsoup.connect("https://java4fun.blogspot.com.tr").get();
             Elements table = doc.select("h1");
             
             for (Element element : table) 
             {
                  System.out.println(element.text());
             }
            
         } 
         catch (Exception e) 
         {
              e.printStackTrace();
         }
        
    }
    
}

Bu şekilde etiket isimlerini yazarak html nesnelerine ulaşabiliriz ancak çoğu zaman daha karmaşık şekilde aramanız gerekecek.

Örneğin class değeri kategoriler olan li elementlerini çekmeniz gerekecek veya png resimlerini çekmek istediğinizde img etiketinin src özelliği içerisinde .png ifadesi geçen elementleri arayacaksınız.

SEÇİCİ ÖZELLİKLERİ

tagname - Etiket Adı İle Ara
doc.select("h1") -Document nesnesindeki tüm h1 elementlerini getir

#Id - Elementi Id Değeri İle Ara
doc.select("#logo") - ID'si logo olan elementleri getir
doc.select("div#menu") - ID'si menu olan div elementlerini getir

.class - Class Özelliği İle Ara
doc.select(".floatLeft") - floatLeft Classında olan elementleri getir
doc.select("div.left") - Classı left olan div elementlerini getir

[attribute] - Etikete ait özelliği kullanarak ara
doc.select("a[href]") - href niteliğine sahip a elementlerini getir

[attribute = value]
doc.select("a[href=http://www.youtube.com/]") - href değeri bu adres olan elementleri getir

[attribute^= value]
doc.select("img[src^=gallery]") - src değeri gallery ile başlayan img elementlerini getir

[attribute$=value]
doc.select("img[src$=.png]") - src değerinin sonu .png ile biten img elementlerini getir

[attribute*=value]
doc.select("a[href*=jsoup]") - href değerinde jsoup kelimesi geçen a elementlerini getir

Tüm HTML Etiketlerine ait nitelikler(html attributes) :
https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes

  UYGULAMA

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

    public static void main(String[] args) {
     
     try 
     {
          String url = "http://java4f.blogspot.com.tr/";
          Document document = Jsoup.connect(url).get();
          
          System.out.println("SAYFADAKİ PNG RESİMLERİNE AİT LİNKLER : \n");
          
             //Src degerinin sonu .png ifadesiyle biten elementleri getir
             Elements pngImages = document.select("[src$=.png]");
             for (Element element : pngImages) 
             {
                  //Resmin linkini yaz
                  System.out.println(element.absUrl("src"));
             }
             
             System.out.println("\nSAYFADA İÇİNDE JSOUP KELİMESİ GEÇEN LİNKLER \n");
             Elements jsoupTutorials = document.select("a[href*=jsoup]");
             for (Element element : jsoupTutorials) 
             {
                  //Ilgili elementin href degerini yaz yani linkin tamamini 
                  System.out.println(element.attr("href"));
             }
      } 
      catch (Exception e) 
      {
             e.printStackTrace();
      }
        
   }
    
}
#KAYNAK
http://jsoup.org/cookbook/extracting-data/selector-syntax 
Devamı.. »

17 Mayıs 2014 Cumartesi

JSoup - HTML Table Elementini Okuma

Ben bu derste dosyadan okuyarak yaptım ama isterseniz önceki derslerden url üzerinden bir sitedeki table elemanının verilerini de okuyabilirsiniz.
İlgili Ders : JSoup İle Web sitesinden HTML Verisi Çekme

Öncelikle bilgisayarımda index.html adında şöyle bir dosya var :

<html>
<head>
<title> Java4Fun - JSoup Dersleri </title>
</head>

<body>

<table id="kisiListesi">
<tr>
  <td>Türker</td>
  <td>Sağlam</td>
  <td>50</td>
</tr>
<tr>
  <td>Neşe</td>
  <td>Yalçın</td>
  <td>23</td>
</tr>
</table> 

</body>
</html>

JSoupDemo.java Dosyası 

import java.io.File;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

    public static void main(String[] args) {

     try 
     {
             File file = new File("K:/index.html");
             Document doc = Jsoup.parse(file, "UTF-8");
             
             Elements table = doc.select("table[id=kisiListesi]");

             //kisiListesi tablosundaki tum satir elementlerini al
             Elements rows = table.select("tr");
             
             //Her bir satir icin tum kolonlari dolas
             for (Element row : rows) 
             {
                    //Bu satira ait kolon elementlerini bul
                    Elements columns = row.select("td");
               
                    //Her kolonun icerigini yazdir
                    for (Element column : columns) 
                    {
                         System.out.println(column.text());
                    }
               
                    System.out.println("\n");
              }
      } 
      catch (Exception e) 
      {
             e.printStackTrace();
      }
        
 } 
}
Devamı.. »

JSoup - HTML Sayfasındaki Resimleri Çekmek

Java ile bir HTML sayfasındaki resimleri çekmek için jsoup kullanarak img etiketine sahip elementler bulunur. Elde edilen her bir html elementinin src özelliğini kullanarak resmin linki elde edilir ve bu link üzerinden ilgili resim dosyası indirilir.

Bu örnekte, verilen url içerisindeki resimleri, resimlerin linkleri ve dosya adlarını nasıl bulacağınızı göreceksiniz.

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

 //Resimlerin cekilecegi web sayfasi
 private final String url = "http://java4fun.blogspot.com.tr";
    
 //Resimlerin kaydedilecegi dizin
   private final String filePath = "K:/resimler";

    public void getAllImages()
    {
       try 
       {
            //Sayfaya baglanma ve HTML icerigin alinmasi
            Document doc = Jsoup.connect(url).get();

            //sayfadaki img etiketine sahip tum html elementlerini al
            Elements img = doc.getElementsByTag("img");

             //Her bir elementin url bilgisini al ve resimi dosyaya yazdir 
             for (Element el : img) 
             {
                  //Her bir resmin linkini al
                  String src = el.absUrl("src");
                  System.out.println("Resim URL : " +src);

                  //Resmin linkini kullanarak bilgisayara indir
                  writeImages(src);
             }

       } 
       catch (IOException e) 
       {
             e.printStackTrace();
       }
       
    }
    
    public void writeImages(String src) throws MalformedURLException {

         //Src linki uzerinden dosya ismini ayristir
         int indexname = src.lastIndexOf("/");
 
         if (indexname == src.length()) {
             src = src.substring(1, indexname);
         }
 
         indexname = src.lastIndexOf("/")+1;
         String imageName = src.substring(indexname, src.length());
 
         System.out.println("Dosya Adı : "+imageName);
        
         URL url = new URL(src);
         
         //Veriyi dosyaya yaz
         try(OutputStream out = new BufferedOutputStream(new FileOutputStream( filePath + imageName));
          InputStream in = url.openStream())
         {
            for (int b; (b = in.read()) != -1;) 
            {
                   out.write(b);
            }
         }
         catch (Exception e)
       {
                e.printStackTrace();
         }

    }
    
    public static void main(String[] args) {

        JSoupDemo test = new JSoupDemo();
        test.getAllImages();
    }
    
}
#KAYNAK
http://examples.javacodegeeks.com/enterprise-java/html/download-images-from-a-website-using-jsoup/
Devamı.. »

JSoup - HTML Sayfasındaki Tüm Linkleri Çekmek

JSoup kütüphanesini kullanarak Java'da bir sayfadaki tüm linkleri çekmek için aşağıdaki örneği inceleyin.

JSoup kütüphanesinde CSS seçicilerin nasıl kullanıldığını buradan öğrenebilirsiniz.
Tüm JSoup Dersleri 

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class HelloWorld {
 
 public static void main(String[] args) {
 
   try
   {
      Document document = Jsoup.connect("http://java4f.blogspot.com.tr").get();
     
      //Sayfa icerisindeki tum linkleri getir
      Elements links = document.select("a[href]");
     
       //Elements nesnesine aktarilan her bir elemanin icerigini yazdir
       for(Element link: links)
       {
           //Link nesnesinin href niteligine ait icerigi yazdir
           System.out.println("link: " +link.attr("abs:href"));
       }
   }
   catch (IOException e)
   {
      e.printStackTrace();
   }
 
 }

#REFERANS
http://jsoup.org/cookbook/input/load-document-from-url 
Devamı.. »

JSoup - Dosyadan HTML Verisi Okumak

Javada JSoup kütüphanesini kullanarak bilgisayarınızdaki bir html dosyasını veya html etiketleri içeren bir metin dosyası gibi başka dosyalardaki html verisinin nasıl ayrıştırıldığını öğrenmek için aşağıdaki örneğe göz atın.

Tek değiştirmeniz gereken elinizdeki dosya türünün uzantısı. Ben bir html dosyasını kullandım ancak bu aşağıdaki gibi html kodları içeren bir text dosyası ya da başka bir dosya türü de olabilirdi.

HTML DOSYASI 

<html>
<head>
<title> Java4Fun - JSOUP DERSLERİ </title>
</head>

<body>

<p>Java İle HTML Dosyası Nasıl Okunur</p>
<p>JSoup Kullanarak Text Dosyasındaki HTML Verisini Parçalama</p>

</body>
</html>

HelloWorld.java

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class HelloWorld {

 public static void main(String[] args) {

   try 
   {
       File file = new File("K:/index.html");
       Document doc = Jsoup.parse(file, "UTF-8");
       System.out.println("Sayfa Başlığı : " + doc.title() + "\n");
      
       //P etiketini tasiyan tum elementleri getir
       Elements elements = doc.getElementsByTag("p");
     
       //Elements nesnesi icerisindeki her bir p elementinin icerigini yaz
       for (Element e : elements) 
       {
            System.out.println(e.text());
       }
   } 
   catch (IOException e) 
   {
       e.printStackTrace();
   }

 }
}
#KAYNAK
http://jsoup.org/cookbook/input/load-document-from-file 
Devamı.. »

JSoup - URL Üzerinden HTML Verisi Çekmek

Önceki örnekte String değişkeni içerisinde hazır bulunan bir html ayrıştırılmıştı. Şimdi bir URL üzerinden HTML elementlerine ulaşılacak.

Bu örnekte blog içerisindeki linkleri ve blog başlığını elde ediliyoruz.

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class HelloWorld {

 public static void main(String[] args) {

   try 
   {
    Document document = Jsoup.connect("http://java4f.blogspot.com.tr").get();
    
    //Sayfa icerisindeki tum linkleri getir
    Elements links = document.select("a[href]");
    
       //Elements nesnesine aktarilan her bir elemani yazdir
       for(Element l: links)
       {
           System.out.println("link: " +l.attr("abs:href"));
       }
   } 
   catch (IOException e) 
   {
      e.printStackTrace();
   }

 }

#REFERANS
http://jsoup.org/cookbook/input/load-document-from-url
Devamı.. »

JSoup - Hello World

Öncelikle http://jsoup.org/download adresinden JSoup kütüphanesini projenize ekleyin.

İlk örnekte herhangi bir web sitesine bağlanmadan String bir değişken içerisindeki HTML içeriği etiketlerden ayıran basit bir uygulama yapılacak.

Daha önce JavaMail API ile uğraştıysanız  bir e-posta içeriğini almak istediğinizde içerik HTML olarak geliyordu. Aşağıdaki örnek belki bu gibi durumlarda işinize yarayabilir.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class HelloWorld {

 public static void main(String[] args) {

  String html = "<html><head><title>Java4Fun - JSoup Dersleri</title></head>" +
                "<body><p>JSoup Derslerine Hoşgeldin!</p> <p> İlk Uygulama..! </p></body></html>"
  
  Document document = Jsoup.parse(html);
  System.out.println(document.text() + "\n");

  Elements paragraphs =  document.getElementsByTag("p");
  
           for (Element element : paragraphs) {
   
                System.out.println(element.text());
           }

 }

}

HTML verisini parçalamak için geriye document nesnesi döndüren JSoup.parse() metodunu kullanılarak bir document nesnesi elde edildi.
İlk yazıyı okuduysanız document nesnesi dom hiyerarşisindeki en üst nesne. Elde edilmek istenen içeriğe ait nesneye document nesnesi üzerinden ulaşılıyor.

Document.getElementsByTag(tag) metodu parametre olarak aldığı etiketi html içeriğinde arıyor ve bulduğu tüm elementleri Elements nesnesi olarak döndürüyor.
Bizim html içeriğimizde 2 tane p elementi vardı. Yani şuan paragraphs nesnesi 2 tane p elementi içeriyor.

Element.text() metodu ilgili element ve o elemente ait tüm alt elemanların barındırdığı içeriği String verisi olarak geriye döndürüyor.

System.out.println(document.text()); komutuyla aldığımız içerik bu durumu kanıtlıyor. Sistem öncelikle hiyerarşik olarak title elementine ait içeriği ve daha sonra da sırasıyla p elementlerine ait içeriği veriyor.

Böylece document nesnesinin tüm alt elemanlarının da içeriği elde edilmiş oluyor

#REFERANS
http://jsoup.org/cookbook/input/parse-document-from-string

Devamı.. »

Java4Fun - JSoup Dersleri

Devamı.. »

JSoup - Java İle HTML Parsing İşlemleri

HTML parsing yani HTML parçalama işlemi bir web sitesinden veri elde etmek için HTML DOM yapısını ve CSS mantığını kullanarak veriyi html yapısından ayrıştırıp  kullanılabilir hale getirdiğimiz işlemlerdir.

Öncelikle nasıl bir yapı üzerinde çalıştığınızı bilmelisiniz.

HTML Dom (Document-Object-Model) Nedir?

"DOM", "Belge Nesnesi Modeli" anlamlarına da gelmektedir. İnternet tarayıcıları girilen internet sayfasını bir belge, bu belge (sayfa) içerisinde bulunan tüm elemanları da nesne olarak kabul eder.

 Buna göre resim, yazı, form gibi tüm elemanlar nesnedir ve tüm elemanlar arasında bir hiyerarşi mevcuttur. İşte DOM sayfa içindeki herhangi bir nesnenin özelliğine müdahele edebilmemize, nesne özelliklerini değiştirebilmemize olanak sağlar.

Daha detaylı bilgi için tıklayınız.

Yukarıdaki resimde hiyerarşik yapıyı görmektesiniz. HTML elementleri arasında en üst eleman document nesnesi ve parçalama işlemlerinde önce document nesnesi elde edilecek ve daha sonra verinin bulunduğu nesneye hiyerarşiye uygun şekilde ulaşılacak.

Eğer bir textarea nesnesinden veri çekilecekse Document -> Form -> TextArea şeklinde sırayla nesneler elde edilecek ve ilgili nesneden veri elde edilecek.

JSoup Nedir?

JSoup bize HTML parçalama işlemlerinde yardımcı olacak açık kaynak kodlu bir java kütüphanesidir. Gerek HTML Dom yapısı ile gerek CSS seçicileri ile HTML elementlerine bu kütüphane yardımıyla ulaşılacak.

Tebrikler sıkıcı kısmı atlattık. Artık JSoup derslerine geçebilirsiniz.
Java4Fun - JSoup Dersleri

#REFERANSLAR
http://tr.wikipedia.org/wiki/Document_Object_Model
http://jsoup.org/
Devamı.. »

Apache POI - Java İle Excelden Veri Okumak

Java'da Microsoft Office dosya formatlarıyla çalışmanız gerektiğinde Apache POI kütüphanesi oldukça işinize yarayacaktır.

 Öncelikle bu adresten kütüphaneyi indirin ve projenize dahil edin. Ben 3.10 sürümünü kullanmaktayım.

 #ÖNEMLİ :
 Excel dosyalarıyla işlem yaparken kullanacağımız sınıflar, kullandığımız excel formatına göre farklılıklar gösterecek.

Eğer xls(Excel 97-2003) uzantılı dosyalarla çalışacaksanız HSSF etiketine sahip sınıflarla, xlsx uzantısındaki dosyalarda ise XSSF etiketine sahip sınıflarla çalışmalısınız.

Burada her iki format için de kullanımı göreceksiniz. Zaten sadece sınıfların başındaki HSSF kısmını XSSF olarak değiştireceğiz hepsi bu.


1. Apache POI Kullanarak XLS Uzantılı Excel Dosyalarını Okumak

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class Test {

 
 public static void main(String[] args) {
  try 
  {
    //Excel Dosya Yolu
    FileInputStream file = new FileInputStream(new File("K:\\personel.xls"));
 
    // Excel Dosyamizi Temsil Eden Workbook Nesnesi
    HSSFWorkbook workbook = new HSSFWorkbook(file);
 
    // Excel Dosyasının Hangi Sayfası İle Çalışacağımızı Seçelim.
    HSSFSheet sheet = workbook.getSheetAt(0);
 
    // Belirledigimiz sayfa icerisinde tum satirlari tek tek dolasacak
    // iterator nesnesi
    Iterator rowIterator = sheet.iterator();
 
    // Okunacak Satir Oldugu Surece
    while (rowIterator.hasNext()) {
     
     // Excel içerisindeki satiri temsil eden nesne
     Row row = rowIterator.next();
 
     // Her bir satir icin tum hucreleri dolasacak iterator nesnesi
     Iterator cellIterator = row.cellIterator();
     while (cellIterator.hasNext()) {
 
      // Excel icerisindeki hucreyi temsil eden nesne
      Cell cell = cellIterator.next();
 
      // Hucrede bulunan deger turunu kontrol et
      switch (cell.getCellType()) 
      {
      
       case Cell.CELL_TYPE_NUMERIC:
        System.out.print("\tPersonel Maaş : "+ cell.getNumericCellValue() +"\n");
        break;
       
       case Cell.CELL_TYPE_STRING:
        System.out.print("Personel Ad : "+ cell.getStringCellValue());
        break;
      }
     }
 
      }
      file.close();
  } 
  catch (FileNotFoundException e) {
   e.printStackTrace();
  } 
  catch (IOException e) {
   e.printStackTrace();
  }
 }
}

#ÇIKTI  :
Personel Ad : Kemal Soydar    Personel Maaş : 1200.0
Personel Ad : Hale Yeşiler       Personel Maaş : 2500.0
Personel Ad : Şenol Baht         Personel Maaş : 3000.0


2. Apache POI Kullanarak XLSX Uzantılı Excel Dosyalarını Okumak

Önceden de belirttiğimiz gibi sadece HSSF yazdığınız kısımları XSSF olarak değiştirerek işleminizi xlsx dosyaları üzerinde gerçekleştirebileceksiniz.

 
 import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Test {

 
 public static void main(String[] args) {
  try 
  {
    //Excel Dosya Yolu
    FileInputStream file = new FileInputStream(new File("K:\\personel.xlsx"));
 
    // Excel Dosyamizi Temsil Eden Workbook Nesnesi
    XSSFWorkbook workbook = new XSSFWorkbook(file);
 
    // Excel Dosyasının Hangi Sayfası İle Çalışacağımızı Seçelim.
    XSSFSheet sheet = workbook.getSheetAt(0);
 
    // Belirledigimiz sayfa icerisinde tum satirlari tek tek dolasacak
    // iterator nesnesi
    Iterator rowIterator = sheet.iterator();
 
    // Okunacak Satir Oldugu Surece
    while (rowIterator.hasNext()) {
     
     // Excel içerisindeki satiri temsil eden nesne
     Row row = rowIterator.next();
 
     // Her bir satir icin tum hucreleri dolasacak iterator nesnesi
     Iterator cellIterator = row.cellIterator();
     while (cellIterator.hasNext()) {
 
      // Excel icerisindeki hucreyi temsil eden nesne
      Cell cell = cellIterator.next();
 
      // Hucrede bulunan deger turunu kontrol et
      switch (cell.getCellType()) 
      {
      
       case Cell.CELL_TYPE_NUMERIC:
        System.out.print("\tPersonel Maaş : "+ cell.getNumericCellValue() +"\n");
        break;
       
       case Cell.CELL_TYPE_STRING:
        System.out.print("Personel Ad : "+ cell.getStringCellValue());
        break;
      }
     }
 
      }
      file.close();
  } 
  catch (FileNotFoundException e) {
   e.printStackTrace();
  } 
  catch (IOException e) {
   e.printStackTrace();
  }
 }
}
  #KAYNAKLAR#
Aşağıdaki adreslerde bu gibi örnekler ve daha fazlasını bulabilirsiniz. Burada paylaşılan yazı ve örnekler kendimce bulduğum ve hazırladığım notlardır.
http://howtodoinjava.com/2013/06/19/readingwriting-excel-files-in-java-poi-tutorial/
http://poi.apache.org/spreadsheet/quick-guide.html 

 

Devamı.. »

Apache POI - Java İle Excele Veri Yazmak

Bu yazıda Java'da Apache POI kütüphanesi kullanılarak Microsoft Excel dosyası nasıl oluşturulur, java ile excel dosyasına veri nasıl yazılır,  Apache POI ile excel işlemlerinde yazı rengi nasıl değiştirilir, yazı biçimi nasıl değiştirilir gibi sorulara cevap verilecek.

Java'da Microsoft Office dosya formatlarıyla çalışmanız gerektiğinde Apache POI kütüphanesi oldukça işinize yarayacaktır.

 Öncelikle bu adresten kütüphaneyi indirin ve projenize dahil edin. Ben 3.10 sürümünü kullanmaktayım.

 #ÖNEMLİ :
 Excel dosyalarıyla işlem yaparken kullanacağımız sınıflar, kullandığımız excel formatına göre farklılıklar gösterecek.

Eğer xls(Excel 97-2003) uzantılı dosyalarla çalışacaksanız HSSF etiketine sahip sınıflarla, xlsx uzantısındaki dosyalarda ise XSSF etiketine sahip sınıflarla çalışmalısınız.

Burada her iki format için de kullanımı göreceksiniz. Zaten sadece sınıfların başındaki HSSF kısmını XSSF olarak değiştireceğiz hepsi bu.

1. Apache POI HSSF Kullanarak XLS Uzantılı Excel Dosyalarına Veri Yazmak

Örnekteki amacımız oluşturulan kişi listesini excel dosyasına aktarmak. Bunun için:
  1. Person adında kişileri temsil edecek sınıfı oluştur.
  2. Test.Main bloğunda kişileri oluştur ve listeye ekle.
  3. Test.createExcelFile(ArrayList list) metoduyla listedeki kişileri excel yapısına aktar.
  4. Test.write(HSSFWorkbook wb) metoduyla excel yapısını dosyaya yaz.



PERSON SINIFI :

public class Person {
 
 private String firstName, lastName;
 private int age;
 
 public Person(String firstName, String lastName, int age)
 {
  this.firstName = firstName;
  this.lastName = lastName;
  this.age = age;
 }

 public String getFirstName() {
  return firstName;
 }

 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 public String getLastName() {
  return lastName;
 }

 public void setLastName(String lastName) {
  this.lastName = lastName;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

}

#TEST SINIFI

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;

public class HSSFTest {

 
 public static void main(String[] args) {
   
  Person p1 = new Person("Murat", "Tekin", 24);
  Person p2 = new Person("Hande", "Şahin", 32);
  Person p3 = new Person("Gamze", "Ömür", 26);
  
  ArrayList list = new ArrayList<>();
  list.add(p1);
  list.add(p2);
  list.add(p3);
  
  HSSFTest t = new HSSFTest();
  t.createExcelFile(list);
  
 }
 
 public void createExcelFile(ArrayList list)
 {
   //Excel Calisma Kitabini Olustur
   HSSFWorkbook workbook = new HSSFWorkbook();
   
   //Excel Sayfasi Olustur
   HSSFSheet sheet = workbook.createSheet("Kişi Listesi");
   
   //Basliklar icin olusturulacak bicim yapisi icin font nesnesi hazirla
   HSSFFont headerFont = workbook.createFont();
   
   //Yazi stili kalin
   headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
   
   //Yazi rengini belirle
   headerFont.setColor(IndexedColors.BLUE.getIndex()); 
   
   //Basliklar icin bicim nesnesini olustur
   HSSFCellStyle headerStyle = workbook.createCellStyle();
   
   //Hazirladigin Font nesnesini bicime ekle
   headerStyle.setFont(headerFont);
   
   //Basliklari Hazirla
   Row headerRow = sheet.createRow(0);
   Cell hname = headerRow.createCell(0);
   hname.setCellValue("AD");
   
   Cell hlastName = headerRow.createCell(1);
   hlastName.setCellValue("SOYAD");
   
   Cell hage = headerRow.createCell(2);
   hage.setCellValue("YAŞ");
   
   //Olusturulan baslik bicimini hucrelere ekle
   hname.setCellStyle(headerStyle);
   hlastName.setCellStyle(headerStyle);
   hage.setCellStyle(headerStyle);
   
   //Listeyi Yaz
   for(int i = 0; i < list.size(); i++)
   {
     //Olusturdugumuz sayfa icerisinde yeni bir satir olustur
     //i+1 nedeni 0. satır yani ilk satira basliklari yazdigimiz icin 0 dan baslatmadik
     Row row = sheet.createRow(i+1);
     
     //Ilgili satir icin yeni bir hucre olustur
     Cell name = row.createCell(0);
     name.setCellValue(list.get(i).getFirstName());
     
     Cell lastName = row.createCell(1);
     lastName.setCellValue(list.get(i).getLastName());
     
     Cell age = row.createCell(2);
     age.setCellValue(list.get(i).getAge());
    
   }
   //Olusturulan Excel Nesnesini Dosyaya Yaz
   write(workbook);
 }
 
 public void write(HSSFWorkbook workbook)
 {
  try 
  {
       FileOutputStream out = new FileOutputStream(new File("K:\\liste.xls"));
       workbook.write(out);
       out.close();
  } 
  catch (FileNotFoundException e) {
    e.printStackTrace();
  } 
  catch (IOException e) {
       e.printStackTrace();
  }
 }
 
}

1. Apache POI XSSF Kullanarak XLSX Uzantılı Excel Dosyalarına Veri Yazmak 

 

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class XSSFTest {

 
 public static void main(String[] args) {
   
  Person p1 = new Person("Murat", "Tekin", 24);
  Person p2 = new Person("Hande", "Şahin", 32);
  Person p3 = new Person("Gamze", "Ömür", 26);
  
  ArrayList list = new ArrayList<>();
  list.add(p1);
  list.add(p2);
  list.add(p3);
  
  XSSFTest t = new XSSFTest();
  t.createExcelFile(list);
  
 }
 
 public void createExcelFile(ArrayList list)
 {
   //Excel Calisma Kitabini Olustur
   XSSFWorkbook workbook = new XSSFWorkbook();
   
   //Excel Sayfasi Olustur
   XSSFSheet sheet = workbook.createSheet("Kişi Listesi");
   
   //Basliklar icin olusturulacak bicim yapisi icin font nesnesi hazirla
   XSSFFont headerFont = workbook.createFont();
   
   //Yazi stili kalin
   headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
   
   //Yazi rengini belirle
   headerFont.setColor(IndexedColors.BLUE.getIndex()); 
   
   //Basliklar icin bicim nesnesini olustur
   XSSFCellStyle headerStyle = workbook.createCellStyle();
   
   //Hazirladigin Font nesnesini bicime ekle
   headerStyle.setFont(headerFont);
   
   //Basliklari Hazirla
   Row headerRow = sheet.createRow(0);
   Cell hname = headerRow.createCell(0);
   hname.setCellValue("AD");
   
   Cell hlastName = headerRow.createCell(1);
   hlastName.setCellValue("SOYAD");
   
   Cell hage = headerRow.createCell(2);
   hage.setCellValue("YAŞ");
   
   //Olusturulan baslik bicimini hucrelere ekle
   hname.setCellStyle(headerStyle);
   hlastName.setCellStyle(headerStyle);
   hage.setCellStyle(headerStyle);
   
   //Listeyi Yaz
   for(int i = 0; i < list.size(); i++)
   {  

     //Olusturdugumuz sayfa icerisinde yeni bir satir olustur
     //i+1 yazmamizin nedeni 0. satir yani ilk satira basliklari yazdigimizdan 0 dan baslatmadik
     Row row = sheet.createRow(i+1);
     
     //Ilgili satir icin yeni bir hucre olustur
     Cell name = row.createCell(0);
     name.setCellValue(list.get(i).getFirstName());
     
     Cell lastName = row.createCell(1);
     lastName.setCellValue(list.get(i).getLastName());
     
     Cell age = row.createCell(2);
     age.setCellValue(list.get(i).getAge());
    
   }
   //Olusturulan Excel Nesnesini Dosyaya Yaz
   write(workbook);
 }
 
 public void write(XSSFWorkbook workbook)
 {
  try 
  {
       FileOutputStream out = new FileOutputStream(new File("K:\\liste.xlsx"));
       workbook.write(out);
       out.close();
  } 
  catch (FileNotFoundException e) {
    e.printStackTrace();
  } 
  catch (IOException e) {
       e.printStackTrace();
  }
 }
 
}
    
#ÇIKTI :

Devamı.. »

Java IO - Java İle Directory(Dizin) Oluşturmak

Java ile bir klasör(dizin) oluşturmak için File sınıfının mkdir() metodu kullanılır. İşlem başarılı  ise true, başarısız ise  geriye false değerini dönderir.

#ÖNEMLİ : Dosya veya dizin oluşturma işlemlerinde File.exists() metoduyla dosya veya klasörün var olup olmadığını kontrol edin. Aksi takdirde dosya veya dizin zaten mevcut ise işleminiz başarısız olacaktır.

public class CreateDirectoryDemo {

   public static void main(String[] args)
   {
      File dosya = new File("C:\\JavaForFun");

      //Dosyanin var olup olmadigini kontrol et
      if(dosya.exists())
      {
       System.out.println("Dosya Zaten Mevcut!");
       return;
      }
      
      if (dosya.mkdir())
        System.out.println("Klasör Başarı İle Oluşturuldu");
 
      else
        System.out.println("İşlem Başarısız");
   }
}

İç İçe - Hiyerarşik Şekilde Dizin(Directory) Oluşturmak 

Eğer tek bir klasör değilde iç içe bir dizin oluşturulacaksa File sınıfının mkdirs()  metodu kullanılır.

public class CreateDirectoryDemo {

   public static void main(String[] args)
   {
      File dosya = new File("C:\\JavaForFun\\BirinciKlasor\\İkinciKlasor");

      //Dosyanin var olup olmadigini kontrol et
      if(dosya.exists())
      {
       System.out.println("Dosya Zaten Mevcut!");
       return;
      }
      
      if (dosya.mkdirs())
        System.out.println("Klasör Başarı İle Oluşturuldu");
 
      else
        System.out.println("İşlem Başarısız");
   }
}


# KAYNAKLAR
Aşağıdaki adreslerde bu gibi örnekler ve daha fazlasını bulabilirsiniz. Burada paylaşılan yazı ve örnekler kendimce bulduğum ve hazırladığım notlardır.
Devamı.. »

Java IO - Java İle Dosya Silme İşlemi

Java ile bir dosyayı silmek için File Sınıfının delete()  metodu kullanılır. Bu metot silme işlemi başarılı ise true, başarısız ise geriye false değeri döndürür.

exists() Metodu : File sınıfına ait olan bu metot ilgili dosya veya  dizin mevcut ise true, değilse false değerini döndürecektir

.
import java.io.File;

public class Dosyalar {

 public static void main(String[] args) {

    try 
    {
        File silinecekDosya = new File("C:\\20140127.log");
 
        // Dosyanin mevcut olup olmadigini kontrol et.
        if (!silinecekDosya.exists())
        throw new IllegalArgumentException("İlgili Dosya Bulunamadı! : "
        + silinecekDosya.getAbsolutePath());

        if (silinecekDosya.delete()) {
        System.out.println("Dosya Başarı İle Silindi.");
        }

        else {
        System.out.println("Silme İşlemi Başarısız!");
        }

   }   catch (Exception e) {
       e.printStackTrace();
       }
 }
}

#KAYNAKLAR
Aşağıdaki adreslerde bu gibi örnekler ve daha fazlasını bulabilirsiniz. Burada paylaşılan yazı ve örnekler kendimce bulduğum ve hazırladığım notlardır.
Devamı.. »

11 Mayıs 2014 Pazar

Apache POI - Excel Kenarlik İşlemleri

Apache POI kütüphanesini kullanarak oluşturacağımız excel dosyalarında hücrelere kenarlık eklemek için HSSFCellStyle(xlsx için XSSFCellStyle) sınıfından yararlanılır.

import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
 
public class BorderDemo {
 
   public static void main(String[] args) {
      
      HSSFWorkbook wb = new HSSFWorkbook();
      HSSFSheet sheet = wb.createSheet("Sayfa1");

      Row row = sheet.createRow(0);

      Cell cell = row.createCell(1);
      cell.setCellValue("JAVA 4 FUN");
      
      //Hucrenin bulundugu sutunun genisligini icerige gore otomatik olarak genislet
      sheet.autoSizeColumn(cell.getColumnIndex());
      
      // Bicim nesnesini olustur ve kenarlik ozellikleri ekle.
      HSSFCellStyle style = wb.createCellStyle();
      
      //Ust Kenarlik
      style.setBorderTop(HSSFCellStyle.BORDER_DASHED);
      style.setTopBorderColor(IndexedColors.GREEN.getIndex());
      
      //Sag Kenarlik
      style.setBorderRight(HSSFCellStyle.BORDER_THIN);
      style.setRightBorderColor(IndexedColors.BLACK.getIndex());
      
      //Alt kenarlik
      style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM_DASH_DOT);
      style.setBottomBorderColor(IndexedColors.BLUE.getIndex());
      
      //Sol kenarlik
      style.setBorderLeft(HSSFCellStyle.BORDER_THICK);
      style.setLeftBorderColor(IndexedColors.RED.getIndex());
      
      //Hucreye bicim nesnesini ekle
      cell.setCellStyle(style);

      //Dosyaya yaz
      try(FileOutputStream file = new FileOutputStream("k://test.xls"))
      {
          wb.write(file);
          file.close();
      }
      catch (Exception e) {
          e.printStackTrace();
      }
   }
   
}
#ÇIKTI :

#KAYNAK :
http://poi.apache.org/spreadsheet/quick-guide.html#Borders
Devamı.. »

Eclipse Görev Çubuğuna Sabitleme Sorunu

Geçen gün karşılaştığım bu sorunu çözmem itibari ile paylaşmaya karar verdim. Sorunu resimli bir şekilde ifade etmek gerekirse :

Gördüğünüz gibi normalde "Bu programı görev çubuğuna sabitle" gibi bir ifade yer alıyordu ancak şuan görünmüyor. Sorunun çözümüne geçelim.

Eclipse'in bulunduğu dizini açın ve daha sonra "eclipse.ini" dosyasını açın.
Text dosyasının ilk satırına aşağıdaki 2 ifadeyi ekleyin ve kaydedin.

-vm
C:\Program Files\Java\jre7\bin

İkinci satırda eğer JRE farklı bir dizinde yüklüyse o dizin yolu ile değiştirmeyi unutmayın. İşlem bu kadar. Eclipse açık ise kapatıp yeniden açarak durumu kontrol edin.


Devamı.. »

Apache POI - Java İle Excel İşlemleri

Apache POI - Java'da Excel Dosyalarını Okumak 
Apache POI - Java'da Excel Dosyasına Veri Yazmak

Apache POI - Workbook Oluşturmak
Apache POI - Excel Sayfası (Sheet) Oluşturmak
Apache POI - Excel Satır Ve Hücre Yapılarını Oluşturmak
Apache POI - Excel Sütun Genişliğinin Hücre İçeriğine Göre Otomatik Olarak Boyutlandırılması
Apache POI - Mevcut Bir Excel Dosyasının Verilen Satır Numarasına Göre İçeriğini Değiştirmek
Apache POI - Excel Kenarlık(Border) İşlemleri
Apache POI - Excel Yazı Tipini Değiştirmek
Apache POI - Excel Yazı Rengini Değiştirmek
Apache POI - Excel Yazı Biçimini Değiştirmek / Kalın - İtalik - Altıçizili

Apache POI - Hücre Değerinin Veri Tipini Öğrenmek
Apache POI - Hücredeki Formül Verisini Almak
Apache POI - Hücreye Formül Verisi Yazmak
Apache POI - Sistem Tarihini Belirlenen Formatta Hücreye Yazmak

#YARARLANILAN KAYNAKLAR
http://poi.apache.org/spreadsheet/quick-guide.html 

Devamı.. »

Apache POI - Excel Font İşlemleri

Apache POI kütüphanesiyle bir Excel dosyasına yazacağınız verinin yazı tipini, rengini, biçimini değiştirmek için HSSFFont(xlsx için XSSFFont) ve HSSFCellStyle(xlsx için XSSFCellStyle) sınıfları kullanılır.

Öncelikle bir HSSFFont nesnesi oluşturulur ve bu sınıfın metotları yardımıyla yazı tipi değiştirilir, yazı biçiminin kalın, italik, altıçizili gibi özellikleri ve metin boyutu belirlenir. Göstermek gerekirse :

     
     //Basliklar icin olusturulacak bicim yapisi icin font nesnesi hazirla
     HSSFFont headerFont = workbook.createFont();
      
     //Yazi stili kalin
     headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
      
     //Yazi rengini belirle
     headerFont.setColor(IndexedColors.BLUE.getIndex());
     
     //Yazi boyutunu belirle
     headerFont.setFontHeightInPoints((short)24);

     //Font Adi
     headerFont.setFontName("Courier New");
            
     //Egik
     headerFont.setItalic(true);
     
     //Alticizili
     headerFont.setUnderline(HSSFFont.U_SINGLE);

Bu şekilde HSSFFont sınıfı yardımıyla font özellikleri belirlenir. Burada sadece belli başlı özellikler verildi. Şimdi oluşturulan bu font nesnesini HSSFCellStyle nesnesi oluşturarak bu nesneye set edelim.

            

     HSSFCellStyle headerStyle = workbook.createCellStyle();
      
     //Hazirladigin Font nesnesini bicime ekle
     headerStyle.setFont(headerFont);
      
     //Basliklari Hazirla
     Row headerRow = sheet.createRow(0);
     Cell name = headerRow.createCell(0);
     name.setCellValue("AD");
      
     Cell lastName = headerRow.createCell(1);
     lastName.setCellValue("SOYAD");
       
     //Olusturulan baslik bicimini hucrelere ekle
     name.setCellStyle(headerStyle);
     lastName.setCellStyle(headerStyle);

Örneğin Tamamı :

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
 
public class HSSFTest {
 
   public static void main(String[] args) {
      
     //Excel Calisma Kitabini Olustur
     HSSFWorkbook workbook = new HSSFWorkbook();
      
     //Excel Sayfasi Olustur
     HSSFSheet sheet = workbook.createSheet("Java4Fun");
     
     //Basliklar icin olusturulacak bicim yapisi icin font nesnesi hazirla
     HSSFFont headerFont = workbook.createFont();
      
     //Yazi stili kalin
     headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
      
     //Yazi rengini belirle
     headerFont.setColor(IndexedColors.BLUE.getIndex());
     
     //Yazi boyutunu belirle
     headerFont.setFontHeightInPoints((short)24);
     
     //Yazı tipini belirle
     headerFont.setFontName("Courier New");
     
     //Egik
     headerFont.setItalic(true);
     
     //Alticizili
     headerFont.setUnderline(HSSFFont.U_SINGLE);
     
     //Hucre bicim nesnesini olustur
     HSSFCellStyle headerStyle = workbook.createCellStyle();
      
     //Hazirladigin Font nesnesini bicime ekle
     headerStyle.setFont(headerFont);
      
     //Basliklari Hazirla
     Row headerRow = sheet.createRow(0);
     
     Cell name = headerRow.createCell(0);
     name.setCellValue("AD");
      
     Cell lastName = headerRow.createCell(1);
     lastName.setCellValue("SOYAD");
      
     //Olusturulan baslik bicimini hucrelere ekle
     name.setCellStyle(headerStyle);
     lastName.setCellStyle(headerStyle);
     
     //Olusturulan Workbook nesnesini dosyaya yaz
     try
     {
          FileOutputStream out = new FileOutputStream(new File("K:\\test.xls"));
          workbook.write(out);
          out.close();
     }
     catch (FileNotFoundException e) {
       e.printStackTrace();
     }
     catch (IOException e) {
          e.printStackTrace();
     }
    
   }
   
}
#YARARLANILAN KAYNAKLAR#
http://poi.apache.org/spreadsheet/quick-guide.html#WorkingWithFonts
Devamı.. »

10 Mayıs 2014 Cumartesi

Apache POI - Java İle Excelde Sistem Tarihini Belirlenen Formatta Hücreye Yazmak


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class HSSFTest {

 
  public static void main(String[] args) {
    
    //Excel Calisma Kitabini Olustur
    HSSFWorkbook workbook = new HSSFWorkbook();
    
    //Excel Sayfasi Olustur
    HSSFSheet sheet = workbook.createSheet("Java4Fun");
    
    HSSFCreationHelper createHelper = workbook.getCreationHelper();
    HSSFCellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
    
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue(new Date());
    cell.setCellStyle(cellStyle);
    
    //Olusturulan Workbook nesnesini dosyaya yaz
    try 
    {
         FileOutputStream out = new FileOutputStream(new File("K:\\test.xls"));
         workbook.write(out);
         out.close();
    } 
    catch (FileNotFoundException e) {
      e.printStackTrace();
    } 
    catch (IOException e) {
         e.printStackTrace();
    }
   
   
  }
  
}
Devamı.. »

7 Mayıs 2014 Çarşamba

Java IO - Java İle Dosya Oluşturmak

Java ile bir dosya oluşturmak için File.createNewFile() metodu kullanılır. Eğer oluşturulmak istenen dosya zaten mevcut ise false, işlem başarılı olursa geriye true değerini dönderir.


import java.io.File;
import java.io.IOException;

/**
 *
 * @author J4F
 */
public class DosyaOlusturma {
    
    public static void main(String[] args)
    {
       try 
       {
          File dosya = new File("C:\\test.txt");
 
          if (dosya.createNewFile()) {
           System.out.println("Dosya başarıyla Oluşturuldu!");
         }
        
         else {
          System.out.println("Dosya Zaten Mevcut! İşlem Başarısız!");
         }
 
       } catch (IOException e) {
         e.printStackTrace();
         }
    }
}
Devamı.. »

Java IO - Java İle Dosya İşlemleri

Devamı.. »

Java4Fun Copyright © 2011 | Template created by O Pregador | Powered by Templates de luxo