package com.socks.jiandan.utils;
import android.app.Activity;
import android.os.Bundle;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.socks.jiandan.base.BaseActivity;
import com.socks.jiandan.base.ConstantString;
import com.socks.jiandan.callback.LoadFinishCallBack;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
public class FileUtil {
/**
* 获取文件夹总大小
*
* @param file
* @return
*/
public static double getDirSize(File file) {
//判断文件是否存在
if (file.exists()) {
//如果是目录则递归计算其内容的总大小
if (file.isDirectory()) {
File[] children = file.listFiles();
double size = 0;
for (File f : children) {
size += getDirSize(f);
}
return size;
} else {//如果是文件则直接返回其大小,以“兆”为单位
return (double) file.length() / 1024 / 1024;
}
} else {
return 0.0;
}
}
/**
* 保存图片
*
* @param activity
* @param picUrl
*/
public static void savePicture(Activity activity, String picUrl, LoadFinishCallBack loadFinishCallBack) {
boolean isSmallPic = false;
String[] urls = picUrl.split("\\.");
File cacheFile = ImageLoader.getInstance().getDiskCache().get(picUrl);
//如果是GIF格式,优先保存GIF动态图,如果不存在,则保存缩略图
if (!cacheFile.exists()) {
String cacheUrl = picUrl.replace("mw600", "small").replace("mw1200", "small")
.replace("large", "small");
cacheFile = ImageLoader.getInstance().getDiskCache().get(cacheUrl);
isSmallPic = true;
}
File picDir = new File(CacheUtil.getSaveDirPath());
if (!picDir.exists()) {
picDir.mkdir();
}
final File newFile = new File(picDir, CacheUtil.getSavePicName(cacheFile, urls));
if (FileUtil.copyTo(cacheFile, newFile)) {
Bundle bundle = new Bundle();
bundle.putBoolean(BaseActivity.DATA_IS_SIAMLL_PIC, isSmallPic);
bundle.putString(BaseActivity.DATA_FILE_PATH, newFile.getAbsolutePath());
loadFinishCallBack.loadFinish(bundle);
} else {
ShowToast.Short(ConstantString.SAVE_FAILED);
}
}
/**
* 复制文件
*
* @param src 源文件
* @param dst 目标文件
* @return
*/
public static boolean copyTo(File src, File dst) {
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream(src);
fo = new FileOutputStream(dst);
in = fi.getChannel();//得到对应的文件通道
out = fo.getChannel();//得到对应的文件通道
in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
try {
if (fi != null) {
fi.close();
}
if (in != null) {
in.close();
}
if (fo != null) {
fo.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
}