/**
* 创建目录
* @param directory
* @param subDirectory
*/
private void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true){
fl.mkdir();
} else if (subDirectory != "") {
dir = subDirectory.replace('\\', '/').split("/");
for (int i = 0; i < dir.length; i++) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false)
subFile.mkdir();
directory += File.separator + dir[i];
}
}
}
catch (Exception ex) {
log.error(ex);
}
}
/**
* 解压缩zip文件
* @param zipFileName
* @param outputDirectory
*/
public HashMap makeZipToFile(String zipFileName, String outputDirectory) {
HashMap map = new HashMap();
String newFilePath = "";
ZipFile zipFile = null;
try {
zipFile = new ZipFile(zipFileName);
java.util.Enumeration e = zipFile.getEntries();
ZipEntry zipEntry = null;
createDirectory(outputDirectory, "");
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
// System.out.println("-------->>文件名:"+zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
newFilePath = outputDirectory + File.separator + name;
newFilePath = newFilePath.replace('\\','/');
// System.out.println("创建目录:" + outputDirectory
// + File.separator + name);
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
if (fileName.indexOf("/") != -1) {
createDirectory(outputDirectory, fileName.substring(0,
fileName.lastIndexOf("/")));
fileName = fileName.substring(
fileName.lastIndexOf("/") + 1, fileName
.length());
}
File f = new File(outputDirectory + File.separator
+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
byte[] by = new byte[1024];
int c;
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.close();
in.close();
String saveFilePath = outputDirectory + File.separator
+ zipEntry.getName();
//图片路径
saveFilePath = saveFilePath.replace('\\', '/');
//图片名称
String saveFileName = zipEntry.getName().substring(zipEntry.getName().lastIndexOf("/")+1,zipEntry.getName().indexOf("."));
//定义图片大小
toJPG(saveFilePath,null,100);
//将数据库查询字段和图片路径放在map中
map.put(saveFileName, saveFilePath);
// System.out.println("-------->>创建文件路径:"+saveFilePath);
// System.out.println("-------->>创建文件名:"+saveFileName);
}
}
//如果不关闭,无法删除zip文件
zipFile.close();
} catch (Exception ex) {
log.error(ex);
}
boolean flag = true;
try {
//保存图片
savePhotoBatch(map);
File oldFile = new File(zipFileName);
//删除zip文件和解压后的文件
oldFile.delete();
deleteDirectory(newFilePath);
} catch (Exception e) {
flag =false;
log.error(e);
}
HashMap flagMap = new HashMap();
flagMap.put("flag", String.valueOf(flag));
return flagMap;
}
public static void toJPG(String source, String dest, int quality) throws JimiException {
if (dest == null || dest.trim().equals(""))
dest = source;
if (!dest.toLowerCase().trim().endsWith("jpg")) {
dest += ".jpg";
System.out.println("Overriding to JPG, output file: " + dest);
}
if (quality < 0 || quality > 100 || (quality + "") == null
|| (quality + "").equals("")) {
System.out.println("quality must between ’0’ and ’100’");
System.out.println("set to DEFAULT value:’75’");
quality = 100;
}
try {
JPGOptions options = new JPGOptions();
options.setQuality(quality);
ImageProducer image = Jimi.getImageProducer(source);
JimiWriter writer = Jimi.createJimiWriter(dest);
writer.setSource(image);
// 加入属性设置,非必要
// /*
writer.setOptions(options);
// */
writer.putImage(dest);
OutputStream os = new ByteArrayOutputStream();
writer.putImage(os);
} catch (JimiException je) {
je.printStackTrace();
throw je;
}
}
/**
* 批量保存图片成blob格式
* @param map
* @throws Exception
*/
public void savePhotoBatch(HashMap map) throws Exception{
Connection conn = null;
Statement stmt = null;
OraclePreparedStatement pstmt = null;
Transaction tx = null;
OracleResultSet rs = null;
try{
Session session = HibernateSessionFactory.getSession();
conn = session.connection();
stmt = conn.createStatement();
tx = session.beginTransaction();
byte[] userPhotoBytes = new byte[0];
for(Iterator it = map.keySet().iterator();it.hasNext();){
String userName = (String)it.next();
String userPhotoPath = (String)map.get(userName);
if (userPhotoPath != null && !userPhotoPath.equals("")) {
File file = new File(userPhotoPath);
FileInputStream fileInputStream = new FileInputStream(file);
userPhotoBytes = new byte[fileInputStream.available()];
rs = (OracleResultSet) stmt
.executeQuery("SELECT picture FROM human_user WHERE username = '"
+ userName + "' FOR UPDATE");
if (rs.next()) {
pstmt = (OraclePreparedStatement) conn
.prepareStatement("UPDATE human_user SET picture = ? WHERE username = '"
+ userName + "'");
pstmt.setBinaryStream(1, fileInputStream, (int) file.length());
pstmt.executeUpdate();
}
fileInputStream.close();
}
}
session.flush();
tx.commit();
}catch (Exception ex) {
ex.printStackTrace();
tx.rollback();
throw new Exception(ex);
} finally {
try {
if(rs!=null){
rs.close();
}
pstmt.close();
stmt.close();
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
HibernateSessionFactory.closeSession();
}
}
/**
* 删除文件
* @param fileName
* @return
*/
public static boolean deleteFile(String fileName){
File file = new File(fileName);
if(file.isFile() && file.exists()){
file.delete();
return true;
}else{
return false;
}
}
/**
* 删除目录(文件夹)以及目录下的文件
* @param dir 被删除目录的文件路径
* @return 目录删除成功返回true,否则返回false
*/
public static boolean deleteDirectory(String dir){
File dirFile = new File(dir);
//如果dir对应的文件不存在,或者不是一个目录,则退出
if(!dirFile.exists() || !dirFile.isDirectory()){
return false;
}
boolean flag = true;
//删除文件夹下的所有文件(包括子目录)
File[] files = dirFile.listFiles();
for(int i=0;i<files.length;i++){
//删除子文件
if(files[i].isFile()){
flag = deleteFile(files[i].getAbsolutePath());
if(!flag){
break;
}
}
//删除子目录
else{
flag = deleteDirectory(files[i].getAbsolutePath());
if(!flag){
break;
}
}
}
if(!flag){
return false;
}
//删除当前目录
if(dirFile.delete()){
return true;
}else{
return false;
}
}