29 Mart 2014 Cumartesi

Java IO - Java İle Veritabanına Binary Data(Resim,Ses,Pdf..) Verisi Eklemek Ve Çekmek

Bilgisayarınızdan veritabanına binary data türünden (resim,ses,video) veriler ekleyebilmek ve tekrar bu verileri çekip kullanmak için Java'nın io paketindeki  File, FileInputStream(veri okumak için), FileOutputStream(veriyi yazmak için) sınıflarından yararlanılır.

Veritabanına nasıl kayıt yapılır veya veritabanından nasıl veri çekilir bildiğinizi varsayıyorum.
PostgreSQL veritabanında personel adında bir tablom var. Bu tabloda ad ve resim adında kolonlar mevcut. Resim kolonu bytea tipinde.

Aşağıda yapılan işlemler bir resim dosyası için gerçekleştirilecek fakat bu işlemleri bir ses dosyası, text dosyası, pdf  dosyası gibi binary data işlemlerinde kullanabilirsiniz.

File.length() : İlgili dosyanın byte değerini verir.
Aşağıdaki örnekte bilgisayardaki bir resmin veritabanına nasıl kaydedileceği gösterilmektedir.

public void kaydet() throws SQLException, IOException 
 {
  PreparedStatement pre = null;
  FileInputStream fis = null;
   try 
   {
     File resim = new File("C:\\test.jpg");
     fis = new FileInputStream(resim);
  
     pre = baglanti.prepareStatement("INSERT INTO personel (ad,resim) VALUES (?,?)");
     pre.setString(1, "Zeynep");
     pre.setBinaryStream(2, fis, resim.length());
     pre.executeUpdate();
   } 
   
   catch (Exception e) 
   {
     e.printStackTrace();
   }
   
   finally
   {
     if(pre != null)
      pre.close();
     if(fis != null)
      fis.close();
   }
   
 }

FileOutputStream.write(byte[] b) : Verilen byte dizisini daha önceden belirlenen dosyaya yazar
Aşağıdaki örnekte veritabanından nasıl binary data çekileceği ve resim verisinin dosyaya nasıl yazdırılacağı gösterilmektedir.


  public void verileriAl() throws SQLException, IOException 
 {
  PreparedStatement pre = null;
  FileOutputStream fos = null;
  try 
  {
    pre = baglanti.prepareStatement("SELECT * FROM personel WHERE id = 1");
    ResultSet results = pre.executeQuery();
    
    if(results.next())
    {
      byte[] resimData = results.getBytes("resim");
      fos = new FileOutputStream(new File("C:\\yeni.jpg"));
      fos.write(resimData);
    }
  } 
  catch (Exception e) 
  {
    e.printStackTrace();
  }
  finally
  {
    if(pre != null)
     pre.close();
    if(fos != null)
     fos.close();
  }
   
 }
Devamı.. »

DecimalFormat SINIFINI KULLANARAK ONDALIKLI SAYILARI BİÇİMLENDİRMEK

Java'da ondalıklı sayıları biçimlendirmek için NumberFormat sınıfının alt sınıfıı olan DecimalFormat sınıfı kullanılır.

DecimalFormat formatter = new DecimalFormat("##.###");

Şeklinde String tipinde bir format biçimini girmemizi isteyen bir constructora sahip olan bu sınıfın bir nesnesi oluşturulur.

    
    DecimalFormat formatter = new DecimalFormat("###,###.###");
    double sayi = 123456.789;
    System.out.println(formatter.format(sayi));

ÇIKTI : 123,456.789
Formatlanmak istenen değeri DecimalFormat.format(double d) metoduna parametre olarak gönderilir ve istenilen değer String olarak elde edilir.

#ÖNEMLİ : Sayının virgülden sonraki basamak sayısı, formatter'a verilen basamak sayısından  fazla ise yani pattern ###.## virgülden sonra 2 basamak gösteriyor ve sayı 1234.5678 ise formatter bu sayıyı yuvarlayarak 1234.57 değerini verecektir.


public class DecimalFormatDemo {
 
    public static void main(String[] args) {
     
      DecimalFormat formatter = new DecimalFormat("###,###.###");
      double sayi = 123456.789; // 123.456,789
      System.out.println(formatter.format(sayi));
      
      //Formatter'a verilen ondalikli kisma ait basamak sayisi 
      //verilen sayinin ondalikli kismindan kucukse sayi yuvarlanir
      
      DecimalFormat formatter2 = new DecimalFormat("##.##");
      double sayi2 = 98.668; //98,67 olarak yuvarlanacak
      System.out.println(formatter2.format(sayi2));
      
      
      DecimalFormat formatter3 = new DecimalFormat("000.000");
      double sayi3 = 12.7; //012,700 olarak eksik kisimlar sifir ile tamamlanacak
      System.out.println(formatter3.format(sayi3));
      
      DecimalFormat formatter4 = new DecimalFormat("##.###");
      double sayi4 = 12.7; // 12,7 olarak direk gosterilir
      System.out.println(formatter4.format(sayi4));
    }
    
}

ÇIKTI         :
123.456,789
98,67
012,700
12,7

<-- #YARARLANILAN 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://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
http://javarevisited.blogspot.com.tr/2012/03/how-to-format-decimal-number-in-java.html

Devamı.. »

Java IO - JAVA İLE DOSYA BOYUTUNU ÖĞRENMEK

Bir dosyanın boyutunu öğrenmek için  File.length() metodu kullanılır. Bu metot bize ilgili dosyanın boyutunu Byte değerinden verir.


import java.io.File;
import java.text.DecimalFormat;

public class Dosyalar {

  public static void main(String[] args)  {
   
    File dosya = new File("C:\\jsf.pdf");
    
    if(dosya.exists())
    {
     double dosyaBoyutu = dosya.length();
     double dosyaBoyutuKB = dosyaBoyutu / 1024;
     double dosyaBoyutuMB = dosyaBoyutuKB/1024;
     
     //Ondalik kisimdan sadece 2 basamagi gostermesi icin DecimalFormat kullandik
     DecimalFormat decimalFormat = new DecimalFormat("#.##");

     System.out.println("Kilobyte Olarak Dosya Boyutu : " + dosyaBoyutuKB);
     System.out.println("Megabyte Olarak Dosya Boyutu : " + decimalFormat.format(dosyaBoyutuMB));
    }

    else
    {
     System.out.println("DOSYA BULUNAMADI!");
    }
  }
}

DecimalFormat sınıfının kullanımını  buradan detaylı bir şekilde öğrenebilirsiniz.
Devamı.. »

Java IO - JAVA İLE DOSYA GİZLİLİĞİNİ KONTROL ETMEK

Bir dosyanın gizli olup olmadığını  File sınıfının isHidden() metodu ile kontrol edilir. Dosya gizli ise geriye true değilse  false değeri dönderir.


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

public class Dosyalar {

    public static void main(String[] args) throws IOException {
   
      File dosya = new File("C:\\dosya.txt");
      
      if(dosya.isHidden())
       System.out.println("Dosya Gizli");
     
      else
       System.out.println("Gizli Değil");
    }
}

Devamı.. »

Java IO - JAVA İLE DOSYAYI SALT OKUNUR (READ ONLY) YAPMAK

Bir dosyayı salt okunur(read only) hale getirmek için File.setReadOnly() metodu kullanılır. Bu metot işlem başarılı olduğu takdirde true, başarısız ise false değerini döndürecektir.

File.setReadOnly() : Dosyayı salt okunur  (read only)  hale getirir.
File.canWrite()       : Dosyanın yazılabilir olup olmadığını kontrol eder.
File.setWritable(boolean b) : Dosyayı yazılabilir  hale getirir.

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

public class Dosyalar {

public static void main(String[] args) throws IOException {
 
  File dosya = new File("C:\\dosya.txt");
  
  //Dosyayi Salt Okunur Yap
  dosya.setReadOnly();
  System.out.println(dosya.canWrite() ? "Yazılabilir" :  "Salt-Okunur");  
 
  //Dosyayi tekrar yazilabilir hale getir
  dosya.setWritable(true);
  System.out.println(dosya.canWrite() ? "Yazılabilir" :  "Salt-Okunur");
}

}
Devamı.. »

27 Mart 2014 Perşembe

Java IO - JAVA İLE DİZİN(DIRECTORY) SİLME İŞLEMİ

Java ile bir dizini silebilmek için File sınıfının geriye boolean bir değer döndüren delete() metodunu kullanılır. Silme işlemi gerçekleşirse  true, başarısız ise false değeri dönecektir. 

#ÖNEMLİ : Dizin içerisinde dosyalar mevcut ise silme işlemi başarısız olacaktır.

Eğer dizin içerisini tümüyle silmek istiyorsak silme metodunu yinelemeli(recursive) bir şekilde kullanarak alt klasörler ve dosyalarla birlikte ilgili dizini tamamen silebiliriz.


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

public class Dosyalar {

 public static void main(String[] args) {
  
  try {
     File silinecekDosya = new File("C:\\dersler");
     dizinSil(silinecekDosya);
  } 

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

 public static void dizinSil(File silinecekDizin) throws IOException {
  if (!silinecekDizin.exists())
   throw new IllegalArgumentException("İlgili Dizin Mevcut Değil : "
     + silinecekDizin.getAbsolutePath());

     // File nesnesine verilen yolun dizin olup olmadigini kontrol et degilse dosya dogrudan silinecektir.
     if (silinecekDizin.isDirectory()) {
     
     // list() metodu ile dizin icerisindeki dosya ve alt dizinlerin isimlerini al
     String[] dizinDosyalari = silinecekDizin.list();

     // Dizin icerigi bos degilse oncelikle alt elemanlari birer birer sil
     if (dizinDosyalari.length > 0) {
        for (int i = 0; i < dizinDosyalari.length; i++) {
        File dosya = new File(silinecekDizin, dizinDosyalari[i]);
        dizinSil(dosya);
        }
     }
  }

     if (silinecekDizin.delete())
     System.out.println(silinecekDizin.getAbsolutePath()
     + " Dizini Başarı  İle Silindi.");
     else
     System.out.println(silinecekDizin.getAbsolutePath()+ " Dizini Silinemedi!");
 }
}

<-- #YARARLANILAN 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://www.java2s.com/Tutorial/Java/0180__File/Removeadirectoryandallofitscontents.htm
http://www.mkyong.com/java/how-to-delete-directory-in-java/
Devamı.. »

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