Plsql ve java ile dizin listeleme

Plsql ve java ile dizin listeleme

Belli bir dizindeki xml dosyalarını okuyup içinden bazı verileri almam gerekiyordu.Bu sebeple aşağıdaki gibi bir fonksiyona ihtiyacım oldu.Bu fonksiyonla belirli bir dizini taratıp dosyaları belirlemek mümkün. Aynı işi yapan plsql kodları da var, ama biz java ile yapalım.Plsql içinde javanın kullanımına da örnek teşkil etmiş olsun.
En son kodumuzda oldugu gibi dizini verip adını öğrendiğiniz xml dosyayı okuyup içeriğine erişebilirsiniz..
Onu farklı bir makalede yazmayı düşünüyorum.

Öncelikle file_list adında bir type create edelim

CREATE OR REPLACE TYPE file_list AS TABLE OF VARCHAR2(255);

Dizini tarayacak java kodumuzu yazıp compile edelim..

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "ListVirtualDirectory" AS
import java.io.*;
import java.security.AccessControlException;
import java.sql.*;
import oracle.sql.driver.*;
import oracle.sql.ArrayDescriptor;
import oracle.sql.ARRAY;
  public class ListVirtualDirectory {
  public static ARRAY getList(String path) throws SQLException, AccessControlException {
  Connection conn = DriverManager.getConnection("jdbc:default:connection:");
  File directory = new File(path);
  ArrayDescriptor arrayDescriptor = new ArrayDescriptor("FILE_LIST",conn);
  ARRAY listed = new ARRAY(arrayDescriptor,conn,((Object[])directory.list()));
  return listed; 
}}

Dizin verip listesini alacağımız fonksiyonu oluşturalım.

CREATE OR REPLACE FUNCTION list_files(path VARCHAR2) RETURN FILE_LIST IS
LANGUAGE JAVA
NAME 'ListVirtualDirectory.getList(java.lang.String) return oracle.sql.ARRAY';

Şimdi dizinimizi tarayalım, bakalım hangi dosyalar var.

SELECT COLUMN_VALUE xml_file_name FROM TABLE(list_files('C:\xmlfiles'));
 
xml_file_name
06012014.xml
07012014.xml
08012014.xml
09012014.xml

Başka bir dizin verip sonuca bakalım.

SELECT COLUMN_VALUE xml_file_name FROM TABLE(list_files('E:\'));
 
xml_file_name
$RECYCLE.BIN
Boot
bootmgr
BOOTSECT.BAK
grldr
System Volume Information
vs2010
winx.ld

Umarım faydalı olur..

Tagged: , , , , , , , ,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir