[转载]android读取sd卡文件的工具类

来源:互联网 发布:知乎大神 编辑:程序博客网 时间:2024/05/19 04:02
package com.guanjia.global;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.os.Environment;public class FileUtils { private String SDCardRoot; private String SDStateString ; public FileUtils() {  //得到当前外部存储设备的目录  SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;  // 获取扩展SD卡设备状态  SDStateString = Environment.getExternalStorageState(); } /**  * 在SD卡上创建文件  * @param dir    目录路径  * @param fileName  * @return  * @throws IOException  / public File createFileInSDCard(String dir ,String fileName) throws IOException {  File file = new File(SDCardRoot+ dir + File.separator + fileName);  file.createNewFile();  return file; } /**  *  在SD卡上创建目录  * @param dir 目录路径  * @return  / public File creatSDDir(String dir) {  File dirFile = new File(SDCardRoot + dir + File.separator);  if( !dirFile.exists() ){   dirFile.mkdirs();  }  return dirFile; } /**  * 判断SD卡上的文件夹是否存在  * @param dir  目录路径  * @param fileName  文件名称  * @return  / public boolean isFileExist(String dir ,String fileName){  File file = new File(SDCardRoot + dir + File.separator + fileName);  return file.exists(); } /***  * 获取文件的路径  * @param dir  * @param fileName  * @return  / public String getFilePath(String dir,String fileName){  return SDCardRoot + dir + File.separator + fileName; } /***  * 获取SD卡的剩余容量,单位是Byte  * @return  / 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; } /**  * 将一个字节数组数据写入到SD卡中  / 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; } /***  * 从sd卡中读取文件,并且以字节流返回  * @param dir  * @param fileName  * @return  / 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) {   // TODO Auto-generated catch block   e.printStackTrace();  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }finally{   try {    if( inputStream != null ){     inputStream.close();    }   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  }  return null; }    /**     * 将一个InputStream里面的数据写入到SD卡中 ,从网络上读取图片     /    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;    }}

原创粉丝点击