import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* 文件相关工具类
* 如:递归获取文件大小,格式化单位,删除文件或文件夹,压缩文件,
* 创建一个JPEG格式的图片文件,拷贝文件
*
*/
public class FileUtils {
/**
* 递归获取文件大小
*
* @param file 文件夹
* @return 文件大小
*/
public static long getFolderSize(File file) {
long size = 0;
try {
File[] fileList = file.listFiles();
for (int i = 0; i < fileList.length; i++) {
// 如果下面还有文件
if (fileList[i].isDirectory()) {
size = size + getFolderSize(fileList[i]);
} else {
size = size + fileList[i].length();
}
}
} catch (Exception e) {
return 0;
}
return size;
}
/**
* 格式化单位
*
* @param size 文件大小
* @return 如10MB、10KB、10GB
*/
public static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
if (size == 0) {
return "0MB";
}
return size + "Byte";
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "KB";
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "MB";
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
+ "TB";
}
/**
* 删除文件或文件夹
*
* @param file 文件或文件夹
*/
public static void deleteFiles(File file) {
if (file == null) return;
if (file.isFile() || file.list().length == 0) {
file.delete();
} else {
File[] files = file.listFiles();
for (File f : files) {
deleteFiles(f);//递归删除每一个文件
f.delete();//删除该文件夹
}
}
}
/**
* 压缩文件
*
* @param path 文件路径
* @return 压缩后的文件
*/
public static File scal(String path) {
File outputFile = new File(path);
long fileSize = outputFile.length();
final long fileMaxSize = 200 * 300;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
double scale = Math.sqrt((float) fileSize / fileMaxSize);
Log.d("scale", scale + "");
options.outHeight = 420;
options.outWidth = 600;
options.inSampleSize = (int) (scale + 0.5);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
outputFile = new File(createImageFile().getPath());
FileOutputStream fos;
try {
fos = new FileOutputStream(outputFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, fos);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
if (!bitmap.isRecycled()) {
bitmap.recycle();
} else {
File tempFile = outputFile;
outputFile = new File(createImageFile().getPath());
copyFileUsingFileChannels(tempFile, outputFile);
}
return outputFile;
}
/**
* 创建一个JPEG格式的图片文件
*
* @return 文件File
*/
public static File createImageFile() {
String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH-mm-SS", Locale.CHINA).format(new Date());
String imageFileName = "JPEG_ " + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = null;
try {
image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
/**
* 创建一个JPEG格式的图片文件
*
* @return 文件Uri
*/
public static Uri createImageFileUri() {
return Uri.fromFile(createImageFile());
}
/**
* 拷贝文件
*
* @param source 初始文件
* @param dest 目标文件
*/
public static void copyFileUsingFileChannels(File source, File dest) {
FileChannel inputChannel = null;
FileChannel outputChannel = null;
try {
inputChannel = new FileInputStream(source).getChannel();
outputChannel = new FileOutputStream(dest).getChannel();
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
assert inputChannel != null;
inputChannel.close();
assert outputChannel != null;
outputChannel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[Android][工具类]FileUtils
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 在任何APP开发中,日期和时间是无处不在的,例如QQ、微信,每条信息都会显示发送时间,还有空间、朋友圈每一条...
- [TOC] 前言 Android SDK原生 API中,有一些常用的工具类,运用得当可以省事省力省时,何况还是An...
- 前言 相信大部分仁兄在使用系统Toast的时候,都感觉不太尽如人意,因为系统Toast显示的位置比较固定,并且字体...
- Android开发过程中,我们需要的很多代码都是重复多次使用的,写成工具类是一个比较好的做法,下面是我常用的几个工...