文件工具类
Android文件操作相关的工具类:
用法和解释见注释
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
/**
* Created by Fanxl on 2015/10/9.
*/
public class FileUtil {
/**
* 指定压缩宽高压缩图片
* @param filePath 待压缩的文件路径
* @param desWidth 要压缩到最终的宽度
* @param desHeight 要压缩到最终的高度
* @return bitmap 压缩之后的图片
*/
public static Bitmap getSmallBitmap(String filePath, int desWidth, int desHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
int inSampleSize = calculateInSampleSize(options, desWidth, desHeight);
Log.e("inSampleSize:", inSampleSize+"");
options.inSampleSize = inSampleSize;
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath, options);
}
//计算图片的缩放值
public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
/**
* @param source 待压缩图片
* @param saveDir 最终要保存的地址
* @param quantity 压缩质量
* @throws FileNotFoundException
*/
public static void compressBitmap(Bitmap source, String saveDir, int quantity) throws FileNotFoundException {
File saveFile = new File(saveDir);
FileOutputStream fos = new FileOutputStream(saveFile);
source.compress(Bitmap.CompressFormat.JPEG, quantity, fos);
}
/**
* 获取指定文件大小
* @param file
* @return fileSize
* @throws Exception
*/
public static long getFileSize(File file) throws Exception {
long size = 0;
if (file.exists()) {
FileInputStream fis = null;
fis = new FileInputStream(file);
size = fis.available();
} else {
Log.e("获取文件大小", "文件不存在!");
}
return size;
}
public static final int SIZETYPE_B = 1;//获取文件大小单位为B的double值
public static final int SIZETYPE_KB = 2;//获取文件大小单位为KB的double值
public static final int SIZETYPE_MB = 3;//获取文件大小单位为MB的double值
public static final int SIZETYPE_GB = 4;//获取文件大小单位为GB的double值
/**
* 转换文件大小,指定转换的类型
*
* @param fileS 待转换的文件大小
* @param sizeType 要转换的文件大小类型
* @return 转换后的文件大小
*/
public static double formetFileSize(long fileS, int sizeType) {
DecimalFormat df = new DecimalFormat("#.00");
double fileSizeLong = 0;
switch (sizeType) {
case SIZETYPE_B:
fileSizeLong = Double.valueOf(df.format((double) fileS));
break;
case SIZETYPE_KB:
fileSizeLong = Double.valueOf(df.format((double) fileS / 1024));
break;
case SIZETYPE_MB:
fileSizeLong = Double.valueOf(df.format((double) fileS / 1048576));
break;
case SIZETYPE_GB:
fileSizeLong = Double.valueOf(df.format((double) fileS / 1073741824));
break;
default:
break;
}
return fileSizeLong;
}
/**
* 获取要保存文件的路径
* @param dirName 保存文件的文件夹名称
* @return dir 保存的路径
*/
public static File getSaveFileDir(String dirName) {
File dir = new File(Environment.getExternalStorageDirectory(), dirName);
if (!dir.exists()) {
dir.mkdirs();
}
return dir;
}
/**
* 获取图片的真实路径
* @param contentUri
* @param context
* @return
*/
public static String getRealPathFromURI(Uri contentUri, Context context) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}