北大青鸟|上海北大青鸟|软件测试培训|软件开发培训|上海软件测试培训|网络营销培训|

您现在的位置:上海电脑学校 IT精英培训基地 >> 软件开发 >> 浏览文章

【软件开发】用Java实现磁盘文件以大对象二进制文件形式存储到Oracle数据库
发布来源:上海北大青鸟【官方网站】    发布时间:2014-4-24 13:39:07    浏览次数: 983

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;jSystem.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;iSystem.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());
}
}

}
北大青鸟上海于达人民广场校区秉承北大青鸟“知识创造未来”的教育理念,严格遵循北大青鸟的教学体系,并开展多种多样的学习交流活动,课外聘请企业专家介绍行业发展动态、讲解最新的测试技术,增加学员的实战知识;我们以“为企业培养优秀的实用型软件人才”为己任,不断努力,不断进取,帮助更多的有志青年真正胜任高端、高薪、高起点的黄金职业,实现自己的 IT 职业梦想!
作为上海市权威软件测试工程师培训中心,目前中心拥有最先进的多媒体教室和项目工作室,充分保证了学员在做软件测试最新技术实训时的无障碍运用。除此之外, 大厦内有多家大型公司,让广大的学员们还没有就业就先体验到工作的气氛。
为了扩展就业渠道,保障学员的就业。北大青鸟APTECH与300多家企业建立了合作关系并签订了长期的用人协议,为学员开拓了良好的就业市场。迄今为止,部分学员分别就业在摩托罗拉、联想集团、北大方正、用友软件、华为、清华同方、东软、亿阳信通、博彦科技、科瑞讯科技等多家知名公司。
更多关于软件开发、软件测试相关内容可来校咨询。
报名咨询:021-53088868
网站咨询:www.57test.com
电子邮件:2746821706 @qq.cn
地址:上海市普陀区凯旋北路1305号(清水湾大酒店)7楼北大青鸟
交通路线:金沙江路地铁站,隧道3、4、13线
公交车次:67路 136路 216路 754路 846路 856路 947路

 

关键词:上海北大青鸟

上一篇: 软件开发Java之Java程序在windows计划任务里执行的问题   下一篇: Java初学者应该注意的问题
  友情链接(交换友情链接请联系张老师)