Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android筆記之 文件保存、壓縮與清空刪除

Android筆記之 文件保存、壓縮與清空刪除

編輯:關於Android編程

這兩天改進優化項目中圖片上傳的代碼,考慮到可能有7、8M的比較大的圖片,因為要先進行壓縮。所以設計到文件的壓縮,保存與清空刪除操作。在這裡記下筆記。

/**
	 * 壓縮並另存為,每次先清空再保存 
	 */
	private void compressFile(){
		//清空保存目錄下的舊照片
		String saveDir = Environment.getExternalStorageDirectory()
				+ "/bag/uploadPictures";
		File imageDir = new File(saveDir);
		if (imageDir.exists()) {
			clearFolder(imageDir);
		}else{
			imageDir.mkdirs();
		}
		//判斷圖片大小,大於300k則壓縮
		for (int i = 0; i < imagePathList.size(); i++) {
			Bitmap bitmap = compressImage(imagePathList.get(i));
			imagePathList.set(i, saveImage(saveDir,bitmap));
		}
	}
	
	/**保存圖片,輸入保存目錄和bitmap,以日期命名,返回保存路徑
	 * 
	 * @param path
	 * @param bitmap
	 * @return
	 */
	private String saveImage(String path ,Bitmap bitmap){
		  Date dt = new Date();     
		  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");   
		  String imageName =sdf.format(dt)+".jpg";   
		   
		File file = new File(path,imageName );
		  if (file.exists()) {
			  file.delete();
		  }
		  try {
		   FileOutputStream out = new FileOutputStream(file);
		   bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
		   out.flush();
		   out.close();
		   Log.d(TAG, "圖片已經保存");
		   return path+"/"+imageName;
		  } catch (FileNotFoundException e) {
			  Log.d(TAG, "文件不存在");
		     e.printStackTrace();
		     return "";
		  } catch (IOException e) {
			  Log.d(TAG, "IO異常"+e.toString());
		   e.printStackTrace();
		   return "";
		  }
	}
	
	/**
	 * 壓縮圖片
	 * @param imagePath
	 * @return
	 */
	private Bitmap compressImage(String imagePath) {
		PhotoUpBitmapCache bitmapCache = new PhotoUpBitmapCache();
		//取1280*720大小
		Bitmap image = bitmapCache.revitionImage(imagePath, 1280,720);
		//用下面這個行代碼會造成OOM,所以必須用Android 自帶的方法去先壓縮再導入
//		Bitmap image = BitmapFactory.decodeFile(imagePath);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這裡100表示不壓縮,把壓縮後的數據存放到baos中
		int options = 100;
		while ( baos.toByteArray().length /1024 > 300) {	//循環判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮		
			baos.reset();//重置baos即清空baos
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這裡壓縮options%,把壓縮後的數據存放到baos中
			options -= 5;//每次都減少5%
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮後的數據baos存放到ByteArrayInputStream中
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream數據生成圖片
		 Log.d(TAG, "文件壓縮成功");
		return bitmap;
	}
	
	/**
	 * 清空文件夾裡面所有子文件
	 */
    private void clearFolder(File file) {   
  
        if(file.isDirectory()){  
            File[] childFiles = file.listFiles();  
            if (childFiles == null || childFiles.length == 0) {  
            
                return;  
            }  
      
            for (int i = 0; i < childFiles.length; i++) {  
                childFiles[i].delete();  
            }  
           
            return ;
        }  
    } 


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved