用Java實現磁盤文件以大對象二進制文件形式存儲到Oracle數據庫

發表于:2007-04-29來源:作者:點擊數: 標簽:java以大磁盤文件對象
package admit.action; /*用 JAVA 讀取各種計算機文件系統的文件列表 當你安裝了jdk,在jdk的類庫里,有一個標準的File類,通過該類,可以很方便的實現瀏覽各種文件系統的功能。 File類: java.lang.Object | +--java.io.File File類擴展了Object對象,實現

package admit.action;

/*用JAVA讀取各種計算機文件系統的文件列表

當你安裝了jdk,在jdk的類庫里,有一個標準的File類,通過該類,可以很方便的實現瀏覽各種文件系統的功能。
File類:
java.lang.Object
|
+--java.io.File
File類擴展了Object對象,實現了Serializable, Comparable定義的接口,可以通過File的一個實例對jvm上的文件系統進行各種操作,下面我編寫了一個FileViewer類,該類通過Iterator類將一個文件列表實現對列表的迭代操作
FileViewer.java */

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.Vector;

 

public class ReadPath {
 File myDir;

 File[] contents;

 Vector vectorList;

 Iterator currentFileView;

 File currentFile;

 String path;

 public ReadPath() {
  path = new String("");
  vectorList = new Vector();
 }

 public ReadPath(String path) {
  this.path = path;
  vectorList = new Vector();
 }

 /**
  * 設置瀏覽的路徑
  */
 public void setPath(String path) {
  this.path = path;
 }

 /***************************************************************************
  * 返回當前目錄路徑
  */
 public String getDirectory() {
  return myDir.getPath();
 }

 /**
  * 刷新列表
  */
 public void refreshList() {

  if (this.path.equals(""))
   path = "c:\\";
  myDir = new File(path);

  vectorList.clear();
  contents = myDir.listFiles();
  // 重新裝入路徑下文件
  for (int i = 0; i < contents.length; i++) {
   vectorList.add(contents[i]);
  }
  currentFileView = vectorList.iterator();
 }

 /**
  * 移動當前文件集合的指針指到下一個條目
  *
  * @return 成功返回true,否則false
  */
 public boolean nextFile() {
  while (currentFileView.hasNext()) {
   currentFile = (File) currentFileView.next();
   return true;
  }
  return false;
 }

 /**
  * 返回當前指向的文件對象的文件名稱
  */
 public String getFileName() {
  return currentFile.getName();
 }

 /**
  * 返回當前指向的文件對象的文件尺寸
  */
 public String getFileSize() {
  return new Long(currentFile.length()).toString();
 }

 /**
  * 返回當前指向的文件對象的最后修改日期
  */
 public String getFileTimeStamp() {
  return new Date(currentFile.lastModified()).toString();
 }

 /**
  * 返回當前指向的文件對象是否是一個文件目錄
  */
 public boolean getFileType() {
  return currentFile.isDirectory();
 }

 /*
  * 通過setPath()方法設定要瀏覽的目錄(注意如果操作系統為微軟操作系統,每個路徑分隔符應寫成兩個斜杠\),nextFile()方法用來移動列表記錄,可以通過getFileName()得到文件或文件夾名稱,通過getFileSize()得到文件尺寸,通過getFileTimeStamp()得到文件的最后修改時間,通過getFileType()判斷是否是一個文件目錄。
  * 編寫一個test例子測試這個FileViewer類
  */

 public ArrayList okpath(){
 
  ReadPath f = new ReadPath();
  f.setPath("c:\\aaa\\");
  f.refreshList();
  
  ArrayList list = new ArrayList();
  while (f.nextFile()) {
    list.add(f.path+f.getFileName());
  }
  return list;
 }
 
/* public static void main(String[] args) {
  ReadPath f = new ReadPath();
  ArrayList list1 = f.okpath();
  for(int j=0;j<list1.size();j++){
   System.out.println(list1.get(j));
  }
  }*/

 }


 
package admit.action;
import java.sql.*;
import java.util.ArrayList;
import java.io.*;
import oracle');" target="_self">oracle.sql.*;
public class WriteBlob {

  public static void main(String[] args) {
 
  

   try {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.100:1521:adminsys","admit","wuyue");
        conn.setAutoCommit(false);

       
        ReadPath readPath=new ReadPath();
        ArrayList list = readPath.okpath();
/*        String ff[]=new String[2];
        String fileName = "c://tupian.gif"; */
 
        for(int i=0;i<list.size();i++){
         System.out.println("路徑名="+list.get(i).toString());
         File f = new File(list.get(i).toString());
            FileInputStream fin = new FileInputStream(f);
           
            BLOB blob = null;

            PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,context) values(?,empty_blob())");
            pstmt.setString(1,""+list.get(i).toString()+"");
            pstmt.executeUpdate();
            pstmt.close();

            pstmt = conn.prepareStatement("select context from javatest where name= ? for update");
            pstmt.setString(1,""+list.get(i).toString()+"");
            ResultSet rset = pstmt.executeQuery();
            if (rset.next()) blob = (BLOB) rset.getBlob(1);

            pstmt = conn.prepareStatement("update javatest set context=? where name=?");

            OutputStream out = blob.getBinaryOutputStream();

            int count = -1, total = 0;
            byte[] data = new byte[(int)fin.available()];
            fin.read(data);
            out.write(data);
            /*
            byte[] data = new byte[blob.getBufferSize()];  另一種實現方法,節省內存
            while ((count = fin.read(data)) != -1) {
              total += count;
              out.write(data, 0, count);
            }
            */

           
            fin.close();
            out.close();

            pstmt.setBlob(1,blob);
            pstmt.setString(2,""+list.get(i).toString()+"");
            pstmt.executeUpdate();
           
            pstmt.close();


         System.out.println("插入成功?。?!");
        }
        conn.commit();
        conn.close();
       
      } catch (SQLException e) {
        System.err.println(e.getMessage());
        e.printStackTrace();
      } catch (IOException e) {
        System.err.println(e.getMessage());
      }
    } 
   
}

 

源文地址:http://blog.csdn.net/hxcfindjob/archive/2006/03/03/614997.aspx


原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
...

熱門標簽

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97