SqlServer数据库中,存储文件的字段的类型是image,对应的Java类型是byte[],下面的函数将演示如何把读取出来数据放入指定目录。当然,首先需要从数据库读出,然后调用该方法。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class FileUtils { private static Logger logger = LoggerFactory.getLogger(FileUtils.class);
/**
* @Title: byteToFile
* @Description: 把二进制数据转成指定后缀名的文件,例如PDF,PNG等
* @param contents 二进制数据
* @param filePath 文件存放目录,包括文件名及其后缀,如D:\file\bike.jpg
* @Author: Wiener
* @Time: 2018-08-26 08:43:36
*/
public static void byteToFile(byte[] contents, String filePath) {
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream output = null;
try {
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(contents);
bis = new BufferedInputStream(byteInputStream);
File file = new File(filePath);
// 获取文件的父路径字符串
File path = file.getParentFile();
if (!path.exists()) {
logger.info("文件夹不存在,创建。path={}", path);
boolean isCreated = path.mkdirs();
if (!isCreated) {
logger.error("创建文件夹失败,path={}", path);
}
}
fos = new FileOutputStream(file);
// 实例化OutputString 对象
output = new BufferedOutputStream(fos);
byte[] buffer = new byte[1024];
int length = bis.read(buffer);
while (length != -1) {
output.write(buffer, 0, length);
length = bis.read(buffer);
}
output.flush();
} catch (Exception e) {
logger.error("输出文件流时抛异常,filePath={}", filePath, e);
} finally {
try {
bis.close();
fos.close();
output.close();
} catch (IOException e0) {
logger.error("文件处理失败,filePath={}", filePath, e0);
}
}
}
}