一个关于图片存储,操作SD卡的工具类
package com.yzxy.tool; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; public class FileUtils { private String SDCardRoot; private String SDStateString ; private final static String ALBUM_PATH = Environment.getExternalStorageDirectory() + "/yueqiu/"; public FileUtils() { //得到当前外部存储设备的目录 SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator; // 获取扩展SD卡设备状态 SDStateString = Environment.getExternalStorageState(); } public File createFileInSDCard(String dir ,String fileName) throws IOException { File file = new File(SDCardRoot+ dir + File.separator + fileName); file.createNewFile(); return file; } public File creatSDDir(String dir) { File dirFile = new File(SDCardRoot + dir + File.separator); if( !dirFile.exists() ){ dirFile.mkdirs(); } return dirFile; } public boolean isFileExist(String fileName){ File file = new File(ALBUM_PATH + fileName); return file.exists(); } public String getFilePath(String dir,String fileName){ return SDCardRoot + dir + File.separator + fileName; } public long getSDAvailableSize(){ if (SDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) { // 取得sdcard文件路径 File pathFile = android.os.Environment.getExternalStorageDirectory(); android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath()); // 获取SDCard上每个block的SIZE long nBlocSize = statfs.getBlockSize(); // 获取可供程序使用的Block的数量 long nAvailaBlock = statfs.getAvailableBlocks(); // 计算 SDCard 剩余大小Byte long nSDFreeSize = nAvailaBlock * nBlocSize ; return nSDFreeSize; } return 0; } public boolean write2SD(String dir,String fileName,byte[] bytes){ if(bytes == null ){ return false; } OutputStream output = null; try { // 拥有可读可写权限,并且有足够的容量 if (SDStateString.equals(android.os.Environment.MEDIA_MOUNTED) && bytes.length < getSDAvailableSize() ) { File file = null; creatSDDir(dir); file = createFileInSDCard(dir,fileName); output = new BufferedOutputStream(new FileOutputStream(file)); output.write(bytes); output.flush(); return true; } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally{ try{ if( output != null ){ output.close(); } } catch(Exception e){ e.printStackTrace(); } } return false; } public Bitmap readbitmap(String path) { File file = new File(ALBUM_PATH+path); BitmapFactory.Options opt = new BitmapFactory.Options(); if( !file.exists() ) { return null; } InputStream inputStream = null; try { inputStream = new BufferedInputStream(new FileInputStream(file)); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Bitmap bit = BitmapFactory.decodeFile(ALBUM_PATH+path); // return bit; return BitmapFactory.decodeStream(inputStream,null,opt); } public byte[] readFromSD(String dir,String fileName) { File file = new File(SDCardRoot + dir + File.separator + fileName); if( !file.exists() ){ return null; } InputStream inputStream = null; try { inputStream = new BufferedInputStream(new FileInputStream(file)); byte[] data = new byte[inputStream.available()]; inputStream.read(data); return data; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if( inputStream != null ){ inputStream.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } public File write2SDFromInput(String dir,String fileName,InputStream input){ File file = null; OutputStream output = null; try { int size = input.available(); // 拥有可读可写权限,并且有足够的容量 if (SDStateString.equals(android.os.Environment.MEDIA_MOUNTED) && size < getSDAvailableSize() ) { creatSDDir(dir); file = createFileInSDCard(dir,fileName); output = new BufferedOutputStream(new FileOutputStream(file)); byte buffer [] = new byte[4*1024]; int temp ; while((temp = input.read(buffer)) != -1){ output.write(buffer,0,temp); } output.flush(); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally{ try{ if( output != null ){ output.close(); } } catch(Exception e){ e.printStackTrace(); } } return file; } public void saveFile(Bitmap bm, String fileName) throws IOException { File dirFile = new File(ALBUM_PATH); fileName=fileName.replace("/", "_"); if(!dirFile.exists()) { dirFile.mkdir(); } File myCaptureFile = new File(ALBUM_PATH + fileName); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); System.out.println("保存成功"); } }