软件编程
位置:首页>> 软件编程>> Android编程>> Android开发中的文件操作工具类FileUtil完整实例

Android开发中的文件操作工具类FileUtil完整实例

作者:LovooGod  发布时间:2021-07-04 23:24:41 

标签:Android,文件,工具类

本文实例讲述了Android开发中的文件操作工具类FileUtil。分享给大家供大家参考,具体如下:


package com.ymerp.android.tools;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.Reader;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
/**
* 文件操作工具
*
* @author chen.lin
*
*/
public class FileUtil {
 private static final String TAG = "FileUtil";
 /**
  * 从sd卡取文件
  *
  * @param filename
  * @return
  */
 public String getFileFromSdcard(String filename) {
   ByteArrayOutputStream outputStream = null;
   FileInputStream fis = null;
   try {
     outputStream = new ByteArrayOutputStream();
     File file = new File(Environment.getExternalStorageDirectory(), filename);
     if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
       fis = new FileInputStream(file);
       int len = 0;
       byte[] data = new byte[1024];
       while ((len = fis.read(data)) != -1) {
         outputStream.write(data, 0, len);
       }
     }
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     try {
       outputStream.close();
       fis.close();
     } catch (IOException e) {
     }
   }
   return new String(outputStream.toByteArray());
 }
 /**
  * 保存文件到sd
  *
  * @param filename
  * @param content
  * @return
  */
 public static boolean saveContentToSdcard(String filename, String content) {
   boolean flag = false;
   FileOutputStream fos = null;
   try {
     File file = new File(Environment.getExternalStorageDirectory(), filename);
     if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
       fos = new FileOutputStream(file);
       fos.write(content.getBytes());
       flag = true;
     }
   } catch (Exception e) {
     e.printStackTrace();
     flag = false;
   } finally {
     try {
       fos.close();
     } catch (IOException e) {
     }
   }
   return flag;
 }
 /**
  * 取得文件大小
  *
  * @param f
  * @return
  * @throws Exception
  */
 @SuppressWarnings("resource")
 public static long getFileSizes(File f) throws Exception {
   long size = 0;
   if (f.exists()) {
     FileInputStream fis = null;
     fis = new FileInputStream(f);
     size = fis.available();
   } else {
     f.createNewFile();
   }
   return size;
 }
 /**
  * 递归取得文件夹大小
  *
  * @param dir
  * @return
  * @throws Exception
  */
 public static long getFileSize(File dir) throws Exception {
   long size = 0;
   File flist[] = dir.listFiles();
   for (int i = 0; i < flist.length; i++) {
     if (flist[i].isDirectory()) {
       size = size + getFileSize(flist[i]);
     } else {
       size = size + flist[i].length();
     }
   }
   return size;
 }
 /**
  * 转换文件大小
  *
  * @param fileS
  * @return
  */
 public static String FormetFileSize(long fileS) {
   DecimalFormat df = new DecimalFormat("#.00");
   String fileSizeString = "";
   if (fileS < 1024) {
     fileSizeString = df.format((double) fileS) + "B";
   } else if (fileS < 1048576) {
     fileSizeString = df.format((double) fileS / 1024) + "K";
   } else if (fileS < 1073741824) {
     fileSizeString = df.format((double) fileS / 1048576) + "M";
   } else {
     fileSizeString = df.format((double) fileS / 1073741824) + "G";
   }
   return fileSizeString;
 }
 /**
  * 递归求取目录文件个数
  *
  * @param f
  * @return
  */
 public static long getlist(File f) {
   long size = 0;
   File flist[] = f.listFiles();
   size = flist.length;
   for (int i = 0; i < flist.length; i++) {
     if (flist[i].isDirectory()) {
       size = size + getlist(flist[i]);
       size--;
     }
   }
   return size;
 }
 /**
  * 在根目录下搜索文件
  *
  * @param keyword
  * @return
  */
 public static String searchFile(String keyword) {
   String result = "";
   File[] files = new File("/").listFiles();
   for (File file : files) {
     if (file.getName().indexOf(keyword) >= 0) {
       result += file.getPath() + "\n";
     }
   }
   if (result.equals("")) {
     result = "找不到文件!!";
   }
   return result;
 }
 /**
  * @detail 搜索sdcard文件
  * @param 需要进行文件搜索的目录
  * @param 过滤搜索文件类型
  * */
 public static List<String> search(File file, String[] ext) {
   List<String> list = new ArrayList<String>();
   if (file != null) {
     if (file.isDirectory()) {
       File[] listFile = file.listFiles();
       if (listFile != null) {
         for (int i = 0; i < listFile.length; i++) {
           search(listFile[i], ext);
         }
       }
     } else {
       String filename = file.getAbsolutePath();
       for (int i = 0; i < ext.length; i++) {
         if (filename.endsWith(ext[i])) {
           list.add(filename);
           break;
         }
       }
     }
   }
   return list;
 }
 /**
  * 查询文件
  *
  * @param file
  * @param keyword
  * @return
  */
 public static List<File> FindFile(File file, String keyword) {
   List<File> list = new ArrayList<File>();
   if (file.isDirectory()) {
     File[] files = file.listFiles();
     if (files != null) {
       for (File tempf : files) {
         if (tempf.isDirectory()) {
           if (tempf.getName().toLowerCase().lastIndexOf(keyword) > -1) {
             list.add(tempf);
           }
           list.addAll(FindFile(tempf, keyword));
         } else {
           if (tempf.getName().toLowerCase().lastIndexOf(keyword) > -1) {
             list.add(tempf);
           }
         }
       }
     }
   }
   return list;
 }
 /**
  * searchFile 查找文件并加入到ArrayList 当中去
  *
  * @param context
  * @param keyword
  * @param filepath
  * @return
  */
 public static List<Map<String, Object>> searchFile(Context context, String keyword, File filepath) {
   List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
   Map<String, Object> rowItem = null;
   int index = 0;
   // 判断SD卡是否存在
   if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
     File[] files = filepath.listFiles();
     if (files.length > 0) {
       for (File file : files) {
         if (file.isDirectory()) {
           if (file.getName().toLowerCase().lastIndexOf(keyword) > -1) {
             rowItem = new HashMap<String, Object>();
             rowItem.put("number", index); // 加入序列号
             rowItem.put("fileName", file.getName());// 加入名称
             rowItem.put("path", file.getPath()); // 加入路径
             rowItem.put("size", file.length() + ""); // 加入文件大小
             list.add(rowItem);
           }
           // 如果目录可读就执行(一定要加,不然会挂掉)
           if (file.canRead()) {
             list.addAll(searchFile(context, keyword, file)); // 如果是目录,递归查找
           }
         } else {
           // 判断是文件,则进行文件名判断
           try {
             if (file.getName().indexOf(keyword) > -1 || file.getName().indexOf(keyword.toUpperCase()) > -1) {
               rowItem = new HashMap<String, Object>();
               rowItem.put("number", index); // 加入序列号
               rowItem.put("fileName", file.getName());// 加入名称
               rowItem.put("path", file.getPath()); // 加入路径
               rowItem.put("size", file.length() + ""); // 加入文件大小
               list.add(rowItem);
               index++;
             }
           } catch (Exception e) {
             Toast.makeText(context, "查找发生错误!", Toast.LENGTH_SHORT).show();
           }
         }
       }
     }
   }
   return list;
 }
 /**
  * 根据后缀得到文件类型
  *
  * @param fileName
  * @param pointIndex
  * @return
  */
 public static String getFileType(String fileName, int pointIndex) {
   String type = fileName.substring(pointIndex + 1).toLowerCase();
   if ("m4a".equalsIgnoreCase(type) || "xmf".equalsIgnoreCase(type) || "ogg".equalsIgnoreCase(type) || "wav".equalsIgnoreCase(type)
       || "m4a".equalsIgnoreCase(type) || "aiff".equalsIgnoreCase(type) || "midi".equalsIgnoreCase(type)
       || "vqf".equalsIgnoreCase(type) || "aac".equalsIgnoreCase(type) || "flac".equalsIgnoreCase(type)
       || "tak".equalsIgnoreCase(type) || "wv".equalsIgnoreCase(type)) {
     type = "ic_file_audio";
   } else if ("mp3".equalsIgnoreCase(type) || "mid".equalsIgnoreCase(type)) {
     type = "ic_file_mp3";
   } else if ("avi".equalsIgnoreCase(type) || "mp4".equalsIgnoreCase(type) || "dvd".equalsIgnoreCase(type)
       || "mid".equalsIgnoreCase(type) || "mov".equalsIgnoreCase(type) || "mkv".equalsIgnoreCase(type)
       || "mp2v".equalsIgnoreCase(type) || "mpe".equalsIgnoreCase(type) || "mpeg".equalsIgnoreCase(type)
       || "mpg".equalsIgnoreCase(type) || "asx".equalsIgnoreCase(type) || "asf".equalsIgnoreCase(type)
       || "flv".equalsIgnoreCase(type) || "navi".equalsIgnoreCase(type) || "divx".equalsIgnoreCase(type)
       || "rm".equalsIgnoreCase(type) || "rmvb".equalsIgnoreCase(type) || "dat".equalsIgnoreCase(type)
       || "mpa".equalsIgnoreCase(type) || "vob".equalsIgnoreCase(type) || "3gp".equalsIgnoreCase(type)
       || "swf".equalsIgnoreCase(type) || "wmv".equalsIgnoreCase(type)) {
     type = "ic_file_video";
   } else if ("bmp".equalsIgnoreCase(type) || "pcx".equalsIgnoreCase(type) || "tiff".equalsIgnoreCase(type)
       || "gif".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type) || "tga".equalsIgnoreCase(type)
       || "exif".equalsIgnoreCase(type) || "fpx".equalsIgnoreCase(type) || "psd".equalsIgnoreCase(type)
       || "cdr".equalsIgnoreCase(type) || "raw".equalsIgnoreCase(type) || "eps".equalsIgnoreCase(type)
       || "gif".equalsIgnoreCase(type) || "jpg".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type)
       || "png".equalsIgnoreCase(type) || "hdri".equalsIgnoreCase(type) || "ai".equalsIgnoreCase(type)) {
     type = "ic_file_image";
   } else if ("ppt".equalsIgnoreCase(type) || "doc".equalsIgnoreCase(type) || "xls".equalsIgnoreCase(type)
       || "pps".equalsIgnoreCase(type) || "xlsx".equalsIgnoreCase(type) || "xlsm".equalsIgnoreCase(type)
       || "pptx".equalsIgnoreCase(type) || "pptm".equalsIgnoreCase(type) || "ppsx".equalsIgnoreCase(type)
       || "maw".equalsIgnoreCase(type) || "mdb".equalsIgnoreCase(type) || "pot".equalsIgnoreCase(type)
       || "msg".equalsIgnoreCase(type) || "oft".equalsIgnoreCase(type) || "xlw".equalsIgnoreCase(type)
       || "wps".equalsIgnoreCase(type) || "rtf".equalsIgnoreCase(type) || "ppsm".equalsIgnoreCase(type)
       || "potx".equalsIgnoreCase(type) || "potm".equalsIgnoreCase(type) || "ppam".equalsIgnoreCase(type)) {
     type = "ic_file_office";
   } else if ("txt".equalsIgnoreCase(type) || "text".equalsIgnoreCase(type) || "chm".equalsIgnoreCase(type)
       || "hlp".equalsIgnoreCase(type) || "pdf".equalsIgnoreCase(type) || "doc".equalsIgnoreCase(type)
       || "docx".equalsIgnoreCase(type) || "docm".equalsIgnoreCase(type) || "dotx".equalsIgnoreCase(type)) {
     type = "ic_file_text";
   } else if ("ini".equalsIgnoreCase(type) || "sys".equalsIgnoreCase(type) || "dll".equalsIgnoreCase(type)
       || "adt".equalsIgnoreCase(type)) {
     type = "ic_file_system";
   } else if ("rar".equalsIgnoreCase(type) || "zip".equalsIgnoreCase(type) || "arj".equalsIgnoreCase(type)
       || "gz".equalsIgnoreCase(type) || "z".equalsIgnoreCase(type) || "7Z".equalsIgnoreCase(type) || "GZ".equalsIgnoreCase(type)
       || "BZ".equalsIgnoreCase(type) || "ZPAQ".equalsIgnoreCase(type)) {
     type = "ic_file_rar";
   } else if ("html".equalsIgnoreCase(type) || "htm".equalsIgnoreCase(type) || "java".equalsIgnoreCase(type)
       || "php".equalsIgnoreCase(type) || "asp".equalsIgnoreCase(type) || "aspx".equalsIgnoreCase(type)
       || "jsp".equalsIgnoreCase(type) || "shtml".equalsIgnoreCase(type) || "xml".equalsIgnoreCase(type)) {
     type = "ic_file_web";
   } else if ("exe".equalsIgnoreCase(type) || "com".equalsIgnoreCase(type) || "bat".equalsIgnoreCase(type)
       || "iso".equalsIgnoreCase(type) || "msi".equalsIgnoreCase(type)) {
     type = "ic_file_exe";
   } else if ("apk".equalsIgnoreCase(type)) {
     type = "ic_file_apk";
   } else {
     type = "ic_file_normal";
   }
   return type;
 }
 /**
  * 改变文件大小显示的内容
  *
  * @param size
  * @return
  */
 public static String changeFileSize(String size) {
   if (Integer.parseInt(size) > 1024) {
     size = Integer.parseInt(size) / 1024 + "K";
   } else if (Integer.parseInt(size) > (1024 * 1024)) {
     size = Integer.parseInt(size) / (1024 * 1024) + "M";
   } else if (Integer.parseInt(size) > (1024 * 1024 * 1024)) {
     size = Integer.parseInt(size) / (1024 * 1024 * 1024) + "G";
   } else {
     size += "B";
   }
   return size;
 }
 /**
  * 得到所有文件
  *
  * @param dir
  * @return
  */
 public static ArrayList<File> getAllFiles(File dir) {
   ArrayList<File> allFiles = new ArrayList<File>();
   // 递归取得目录下的所有文件及文件夹
   File[] files = dir.listFiles();
   for (int i = 0; i < files.length; i++) {
     File file = files[i];
     allFiles.add(file);
     if (file.isDirectory()) {
       getAllFiles(file);
     }
   }
   Logger.i("test", allFiles.size() + "");
   return allFiles;
 }
 /**
  * 判断文件MimeType 类型
  *
  * @param f
  * @return
  */
 public static String getMIMEType(File f) {
   String type = "";
   String fName = f.getName();
   /* 取得扩展名 */
   String end = fName.substring(fName.lastIndexOf(".") + 1, fName.length()).toLowerCase();
   /* 依扩展名的类型决定MimeType */
   if (end.equalsIgnoreCase("m4a") || end.equalsIgnoreCase("mp3") || end.equalsIgnoreCase("mid") || end.equalsIgnoreCase("xmf")
       || end.equalsIgnoreCase("ogg") || end.equalsIgnoreCase("wav")) {
     type = "audio";
   } else if (end.equalsIgnoreCase("3gp") || end.equalsIgnoreCase("mp4")) {
     type = "video";
   } else if (end.equalsIgnoreCase("jpg") || end.equalsIgnoreCase("gif") || end.equalsIgnoreCase("png")
       || end.equalsIgnoreCase("jpeg") || end.equalsIgnoreCase("bmp")) {
     type = "image";
   } else if (end.equalsIgnoreCase("apk")) {
     /* android.permission.INSTALL_PACKAGES */
     type = "application/vnd.android.package-archive";
   } else if (end.equalsIgnoreCase("txt") || end.equalsIgnoreCase("java")) {
     /* android.permission.INSTALL_PACKAGES */
     type = "text";
   } else {
     type = "*";
   }
   /* 如果无法直接打开,就跳出软件列表给用户选择 */
   if (end.equalsIgnoreCase("apk")) {
   } else {
     type += "/*";
   }
   return type;
 }
 /**
  * 拷贝文件
  *
  * @param fromFile
  * @param toFile
  * @throws IOException
  */
 public static void copyFile(File fromFile, String toFile) throws IOException {
   FileInputStream from = null;
   FileOutputStream to = null;
   try {
     from = new FileInputStream(fromFile);
     to = new FileOutputStream(toFile);
     byte[] buffer = new byte[1024];
     int bytesRead;
     while ((bytesRead = from.read(buffer)) != -1)
       to.write(buffer, 0, bytesRead); // write
   } finally {
     if (from != null)
       try {
         from.close();
       } catch (IOException e) {
         Log.e(TAG, "", e);
       }
     if (to != null)
       try {
         to.close();
       } catch (IOException e) {
         Log.e(TAG, "", e);
       }
   }
 }
 /**
  * 创建文件
  *
  * @param file
  * @return
  */
 public static File createNewFile(File file) {
   try {
     if (file.exists()) {
       return file;
     }
     File dir = file.getParentFile();
     if (!dir.exists()) {
       dir.mkdirs();
     }
     if (!file.exists()) {
       file.createNewFile();
     }
   } catch (IOException e) {
     Log.e(TAG, "", e);
     return null;
   }
   return file;
 }
 /**
  * 创建文件
  *
  * @param path
  */
 public static File createNewFile(String path) {
   File file = new File(path);
   return createNewFile(file);
 }// end method createText()
 /**
  * 删除文件
  *
  * @param path
  */
 public static void deleteFile(String path) {
   File file = new File(path);
   deleteFile(file);
 }
 /**
  * 删除文件
  *
  * @param file
  */
 public static void deleteFile(File file) {
   if (!file.exists()) {
     return;
   }
   if (file.isFile()) {
     file.delete();
   } else if (file.isDirectory()) {
     File files[] = file.listFiles();
     for (int i = 0; i < files.length; i++) {
       deleteFile(files[i]);
     }
   }
   file.delete();
 }
 /**
  * 向Text文件中写入内容
  *
  * @param file
  * @param content
  * @return
  */
 public static boolean write(String path, String content) {
   return write(path, content, false);
 }
 public static boolean write(String path, String content, boolean append) {
   return write(new File(path), content, append);
 }
 public static boolean write(File file, String content) {
   return write(file, content, false);
 }
 /**
  * 写入文件
  *
  * @param file
  * @param content
  * @param append
  * @return
  */
 public static boolean write(File file, String content, boolean append) {
   if (file == null || StringUtil.empty(content)) {
     return false;
   }
   if (!file.exists()) {
     file = createNewFile(file);
   }
   FileOutputStream fos = null;
   try {
     fos = new FileOutputStream(file, append);
     fos.write(content.getBytes());
   } catch (Exception e) {
     Log.e(TAG, "", e);
     return false;
   } finally {
     try {
       fos.close();
     } catch (IOException e) {
       Log.e(TAG, "", e);
     }
     fos = null;
   }
   return true;
 }
 /**
  * 获得文件名
  *
  * @param path
  * @return
  */
 public static String getFileName(String path) {
   if (StringUtil.empty(path)) {
     return null;
   }
   File f = new File(path);
   String name = f.getName();
   f = null;
   return name;
 }
 /**
  * 读取文件内容,从第startLine行开始,读取lineCount行
  *
  * @param file
  * @param startLine
  * @param lineCount
  * @return 读到文字的list,如果list.size<lineCount则说明读到文件末尾了
  */
 public static List<String> readFile(File file, int startLine, int lineCount) {
   if (file == null || startLine < 1 || lineCount < 1) {
     return null;
   }
   if (!file.exists()) {
     return null;
   }
   FileReader fileReader = null;
   List<String> list = null;
   try {
     list = new ArrayList<String>();
     fileReader = new FileReader(file);
     LineNumberReader lineReader = new LineNumberReader(fileReader);
     boolean end = false;
     for (int i = 1; i < startLine; i++) {
       if (lineReader.readLine() == null) {
         end = true;
         break;
       }
     }
     if (end == false) {
       for (int i = startLine; i < startLine + lineCount; i++) {
         String line = lineReader.readLine();
         if (line == null) {
           break;
         }
         list.add(line);
       }
     }
   } catch (Exception e) {
     Log.e(TAG, "read log error!", e);
   } finally {
     if (fileReader != null) {
       try {
         fileReader.close();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
   return list;
 }
 /**
  * 创建文件夹
  *
  * @param dir
  * @return
  */
 public static boolean createDir(File dir) {
   try {
     if (!dir.exists()) {
       dir.mkdirs();
     }
     return true;
   } catch (Exception e) {
     Log.e(TAG, "create dir error", e);
     return false;
   }
 }
 /**
  * 在SD卡上创建目录
  *
  * @param dirName
  */
 public static File creatSDDir(String dirName) {
   File dir = new File(dirName);
   dir.mkdir();
   return dir;
 }
 /**
  * 判断SD卡上的文件是否存在
  */
 public static boolean isFileExist(String fileName) {
   File file = new File(fileName);
   return file.exists();
 }
 /**
  * 将一个InputStream里面的数据写入到SD卡中
  */
 public static File write2SDFromInput(String path, String fileName, InputStream input) {
   File file = null;
   OutputStream output = null;
   try {
     creatSDDir(path);
     file = createNewFile(path + "/" + fileName);
     output = new FileOutputStream(file);
     byte buffer[] = new byte[1024];
     int len = -1;
     while ((len = input.read(buffer)) != -1) {
       output.write(buffer, 0, len);
     }
     output.flush();
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     try {
       output.close();
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
   return file;
 }
 /**
  * 读取文件内容 从文件中一行一行的读取文件
  *
  * @param file
  * @return
  */
 public static String readFile(File file) {
   Reader read = null;
   String content = "";
   String result = "";
   BufferedReader br = null;
   try {
     read = new FileReader(file);
     br = new BufferedReader(read);
     while ((content = br.readLine().toString().trim()) != null) {
       result += content + "\r\n";
     }
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     try {
       read.close();
       br.close();
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
   return result;
 }
 /**
  * 将图片保存到本地时进行压缩, 即将图片从Bitmap形式变为File形式时进行压缩,
  * 特点是: File形式的图片确实被压缩了, 但是当你重新读取压缩后的file为 Bitmap是,它占用的内存并没有改变
  *
  * @param bmp
  * @param file
  */
 public static void compressBmpToFile(Bitmap bmp, File file) {
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   int options = 80;// 个人喜欢从80开始,
   bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
   while (baos.toByteArray().length / 1024 > 100) {
     baos.reset();
     options -= 10;
     bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);
   }
   try {
     FileOutputStream fos = new FileOutputStream(file);
     fos.write(baos.toByteArray());
     fos.flush();
     fos.close();
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
 /**
  * 将图片从本地读到内存时,进行压缩 ,即图片从File形式变为Bitmap形式
  * 特点: 通过设置采样率, 减少图片的像素, 达到对内存中的Bitmap进行压缩
  * @param srcPath
  * @return
  */
 public static Bitmap compressImageFromFile(String srcPath, float pixWidth, float pixHeight) {
   BitmapFactory.Options options = new BitmapFactory.Options();
   options.inJustDecodeBounds = true;// 只读边,不读内容
   Bitmap bitmap = BitmapFactory.decodeFile(srcPath, options);
   options.inJustDecodeBounds = false;
   int w = options.outWidth;
   int h = options.outHeight;
   //float pixWidth = 800f;//
   //float pixHeight = 480f;//
   int scale = 1;
   if (w > h && w > pixWidth) {
     scale = (int) (options.outWidth / pixWidth);
   } else if (w < h && h > pixHeight) {
     scale = (int) (options.outHeight / pixHeight);
   }
   if (scale <= 0)
     scale = 1;
   options.inSampleSize = scale;// 设置采样率
   options.inPreferredConfig = Config.ARGB_8888;// 该模式是默认的,可不设
   options.inPurgeable = true;// 同时设置才会有效
   options.inInputShareable = true;// 。当系统内存不够时候图片自动被回收
   bitmap = BitmapFactory.decodeFile(srcPath, options);
   // return compressBmpFromBmp(bitmap);//原来的方法调用了这个方法企图进行二次压缩
   // 其实是无效的,大家尽管尝试
   return bitmap;
 }
 /**
 *  指定分辨率和清晰度的图片压缩
 */
 public void transImage(String fromFile, String toFile, int width, int height, int quality)
 {
   try
   {
     Bitmap bitmap = BitmapFactory.decodeFile(fromFile);
     int bitmapWidth = bitmap.getWidth();
     int bitmapHeight = bitmap.getHeight();
     // 缩放图片的尺寸
     float scaleWidth = (float) width / bitmapWidth;
     float scaleHeight = (float) height / bitmapHeight;
     Matrix matrix = new Matrix();
     matrix.postScale(scaleWidth, scaleHeight);
     // 产生缩放后的Bitmap对象
     Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, false);
     // save file
     File myCaptureFile = new File(toFile);
     FileOutputStream out = new FileOutputStream(myCaptureFile);
     if(resizeBitmap.compress(Bitmap.CompressFormat.JPEG, quality, out)){
       out.flush();
       out.close();
     }
     if(!bitmap.isRecycled()){
       bitmap.recycle();//记得释放资源,否则会内存溢出
     }
     if(!resizeBitmap.isRecycled()){
       resizeBitmap.recycle();
     }
   }
   catch (FileNotFoundException e)
   {
     e.printStackTrace();
   }
   catch (IOException ex)
   {
     ex.printStackTrace();
   }
 }
}

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/lovoo/article/details/51350727

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com