软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件开发专栏>>java>>正文
用Java实现磁盘文件以大对象二进制文件形式存储到Oracle数据库
文章出处:CSDNBlog 作者:胡祥春 发布时间:2006-04-07

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.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


站内搜索
相关文章
◎java经典问题:传值还是传引用
◎将数据库操作封装到Javabean
◎以小博大Java性能优化技巧集锦
◎Java平台上的CRM系统
◎应用Java技术实现数据库应用系统
◎Windows下JAVA环境变量的设置祥解
◎java经典网址
◎java基础知识问答—java入门与加深二 (2)
◎java基础知识问答—java入门与加深二 (1)
◎MVC设计模式
◎Struts行为测试框架StrutsTestCase实战
◎Java学习之路:不走弯路,就是捷径
◎JRockit JVM 中的内存泄漏检测
◎基于JDK5.0的一些Thread总结
◎消除内存泄漏
◎POJO应用架构:Spring与EJB 3.0的对比
◎构建高性能J2EE应用的10个技巧
◎有可能挑战Java开发优势的四种技术
◎六种异常处理的陋习
◎多处理器平台上J2EE应用的内存争用
◎MVC模式在j2me项目中的应用(二)
◎MVC模式在j2me项目中的应用(一)
◎J2ME程序开发新手入门九大要点
◎精通J2ME中的Hello World
◎浅析Java多线程程序设计机制
◎J2EE架构学习者的6个最佳实践
◎Tomcat在Windows 2000下的安装配制
◎KJava在移动设备中的应用
◎Java-IDE环境
◎理解Java应用服务器的七种武器
◎Java嵌入式开发之二
◎Java嵌入式开发之一
◎Java学习从入门到精通
◎凤凰浴火JBuilder2006新功能赏析
◎UML技术在基于Web的应用系统中的应用
◎Oracle9i 数据库控制文件
◎J2EE Server下的第一个EJB程序
◎Java CORBA入门
◎CORBA 入门
◎Struts 框架
◎Struts标记库
◎ejb入门
◎Java语言编码规范
◎J2EE从零开始之J2EE平台简介
◎J2EE从零开始之测试平台安装
◎J2EE从零开始之准备工作
◎J2EE从零开始之EJB开发过程
◎J2EE从零开始之企业Beans(EJB)简介
◎J2EE从零开始之EJB(1)
◎J2EE从零开始之EJB(2)
热门文章
◎Java学习从入门到精通
◎Windows下JAVA环境变量的设置祥解
◎Struts标记库
◎Struts 框架
◎Java学习之路:不走弯路,就是捷径
◎JAVA基础测试中异常问题汇总
◎凤凰浴火JBuilder2006新功能赏析
◎hibernate应用配置说明-middlegen和hbm2java的配置
◎java经典网址
◎J2EE从零开始之J2EE平台简介
◎MVC设计模式
◎将数据库操作封装到Javabean
◎J2EE从零开始之EJB(1)
◎ejb入门
◎Java常见问题集锦
◎J2EE从零开始之EJB开发过程
◎Java语言编码规范
◎消除内存泄漏
◎Hibernate如何配置操作多个数据库
◎J2EE从零开始之EJB(2)
◎java基础知识问答—java入门与加深二 (1)
◎J2EE从零开始之测试平台安装
◎以小博大Java性能优化技巧集锦
◎java经典问题:传值还是传引用
◎java基础知识问答—java入门与加深二 (2)
◎Oracle9i 数据库控制文件
◎J2EE从零开始之实体EJB
◎Struts行为测试框架StrutsTestCase实战
◎J2EE从零开始之准备工作
◎Tomcat在Windows 2000下的安装配制
◎J2EE从零开始之企业Beans(EJB)简介
◎Java CORBA入门
◎J2EE Server下的第一个EJB程序
◎六种异常处理的陋习
◎应用Java技术实现数据库应用系统
◎JRockit JVM 中的内存泄漏检测
◎J2EE架构学习者的6个最佳实践
◎UML技术在基于Web的应用系统中的应用
◎Java平台上的CRM系统
◎Java-IDE环境
◎POJO应用架构:Spring与EJB 3.0的对比
◎有可能挑战Java开发优势的四种技术
◎J2ME程序开发新手入门九大要点
◎CORBA 入门
◎Java嵌入式开发之一
◎KJava在移动设备中的应用
◎理解Java应用服务器的七种武器
◎构建高性能J2EE应用的10个技巧
◎基于JDK5.0的一些Thread总结
◎MVC模式在j2me项目中的应用(一)

Google提供的广告