将文件保存的方法通常在web系统中有几种方式。1、可以将文件上传到文件服务器,然后可以通过访问该文件地址下载或者查看。2、将文件进行二进制编码保存到数据库的大字段中。两种方式各有优缺点,这里就不在描述了。现在说明如何将第2种方式存放于数据库中的二进制编码导出文件。此处只写出关键代码,希望对需要进行如此操作的人有所帮助。
String sql = "select f.fullfileid,f.fullfilename,f.fullfilesize,f.savedfile from file" 该sql中的字段 fullfilename保存的为该文件的文件名以及文件类型。 savedfile字段保存的则为文件的二进制编码。
try {
con = ConfigUtil.getConnection();
stmtSelect = con.prepareStatement(sql);
rs = stmtSelect.executeQuery();
while (rs.next()) {
String fullfileid = rs.getString("fullfileid");
String fileName = rs.getString("fullfilename");
input = rs.getBinaryStream("savedfile");
String newFileName = startNumber + "__" + fullfileid + "__" +fileName;
File file = new File(downLoadPath + newFileName);
file.createNewFile();
fileStream = new FileOutputStream(file);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = input.read(bytes)) != -1) {
fileStream.write(bytes,0,len);
}
fileStream.close();
System.gc();
}
isSuccess = true;
} catch (Exception e) {
isSuccess = false;
throw e;
} finally {
// 略 关闭链接 等操作
}
代码中downLoadPath 变量为 生成文件保存的路径。代码如上面所述,但是往往要根据实际情况去实现。比如如果file表中文件很多数万或者几十万。则要考虑查询效率,可进行分页查询后导出。 记得循环中进行手动内存回收。防止可能常出现的内存溢出。