public class ReadFile {
private static ArrayList fileList = new ArrayList();
public static void main(String[] args){
long a = System.currentTimeMillis();
refreshFileList("F:\\文件夹");
for(int i = 0; i < fileList.size(); i++){
String fstr = (String) fileList.get(i);
File ff = new File(fstr);
insertBlob(ff);
}
System.out.println(System.currentTimeMillis() - a );
}
/**
* 递归遍历文件夹,存储目录名字进
* fileList
* @param strPath
*/
public static void refreshFileList(String strPath){
File dir = new File(strPath);
File[] files = dir.listFiles();
if(files == null){
return;
}
//递归遍历文件夹
for (int i = 0 ; i < files.length; i++){
if (files[i].isDirectory()){
refreshFileList(files[i].getAbsolutePath());
} else {
String strFileName = files[i].getAbsolutePath().toLowerCase();
File f = new File(strFileName);
fileList.add(files[i].getAbsolutePath());
}
}
}
/**插入BLOB
* 一般是先通过select ... for update锁定blob列,然后写入blob值,
* 然后提交。要用到特定的Oracle BLOB类。
*/
public static void insertBlob(File f){
try {
Connection conn = ConnDB.getConn();
conn.setAutoCommit(false);
Statement st = conn.createStatement();
String sql ="INSERT INTO FILE_TEST(FILEID,FILE_B,FILE_COMMENT) VALUES(FILE_TEST_SEQ.nextval,EMPTY_BLOB(),'"+f.getAbsolutePath()+"')";
System.out.println("OOO : "+f.getAbsolutePath());
st.executeUpdate(sql);
ResultSet rs = st.executeQuery("SELECT FILE_B FROM FILE_TEST WHERE FILEID = 1 FOR UPDATE ");
if(rs.next()){
oracle.sql.BLOB blob = (BLOB) rs.getBlob(1);
OutputStream utStream = blob.getBinaryOutputStream();
InputStream fis = new FileInputStream(f);
byte[] b = new byte[blob.getBufferSize()];
int len = 0;
while ((len = fis.read(b)) != -1){
outStream.write(b,0,len);
}
fis.close();
outStream.flush();
outStream.close();
}
conn.commit();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28275505/viewspace-767395/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28275505/viewspace-767395/
本文介绍了一个Java程序,该程序能够递归地遍历指定目录下的所有文件,并将这些文件的内容批量插入到Oracle数据库的BLOB字段中。程序首先使用递归方法获取所有文件路径,然后逐个读取文件内容,并通过预设的SQL语句将文件内容存入数据库。
2047

被折叠的 条评论
为什么被折叠?



