自己写的工具类,写的不好,慢慢修改。

记得加上权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

package com.sy.utils;import android.content.Context;import android.os.Environment;import android.os.StatFs;import android.util.Log;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;/** * Created by SY on 2016/5/9. * 文件读写工具类 */public class FileUtils {    private Context context;    private String SDCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();//sd卡路径    private static String SDState = Environment.getExternalStorageState();//SD卡状态    public FileUtils(Context context) {        this.context = context;    }    /** * 文件存储到/data/data/<packagename>/files/默认目录下 * * @param fileName * @param bytes * @return */    public boolean write2CacheFile(String fileName, byte[] bytes) {        FileOutputStream out = null;        BufferedOutputStream bos = null;        try {            out = context.openFileOutput(fileName, Context.MODE_PRIVATE);            bos = new BufferedOutputStream(out);            bos.write(bytes);            bos.flush();            return true;        } catch (Exception e) {            e.printStackTrace();        } finally {            if (bos != null) {                try {                    bos.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return false;    }    /** * 向SD卡里写字节 * * @param path 文件夹目录 * @param file 文件名 * @param data 写入的字节数组 * @return */    public static boolean writeBytes(String path, String file, byte[] data) {        FileOutputStream fos = null;        try {            // 拥有足够的容量            if (data.length < getSDFreeSize()) {                createDirectoryIfNotExist(path);                createFileIfNotExist(path + file);                fos = new FileOutputStream(path + File.separator + file);                fos.write(data);                fos.flush();                return true;            }        }catch (Exception e){            Log.e("writeBytes", e.getMessage());        }finally {            if (fos != null) {                try {                    fos.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            return false;        }    }    /** * 从SD卡里读取字节数组 * * @param path 目录 * @param fileName 文件名 * @return 返回字节数组,文件不存在返回null */    public static byte[] readBytes(String path, String fileName) {        File file = new File(path + 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 (IOException e) {            e.printStackTrace();        } finally {            try {                if (inputStream != null) {                    inputStream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        return null;    }    /** * 将一个字节流写入到SD卡文件 * * @param path 目录路径 * @param fileName 文件名 * @param input 字节流 * @return */    public static Boolean write2SDFromInput(String path, String fileName, InputStream input) {        File file = null;        OutputStream output = null;        try {            int size = input.available();            // 拥有足够的容量            if (size < getSDFreeSize()) {                createDirectoryIfNotExist(path);                createFileIfNotExist(path + File.separator + fileName);                file = new File(path + File.separator + fileName);                output = new BufferedOutputStream(new FileOutputStream(file));                byte buffer[] = new byte[1024];                int temp;                while ((temp = input.read(buffer)) != -1) {                    output.write(buffer, 0, temp);                }                output.flush();                return true;            }        } catch (IOException e1) {            e1.printStackTrace();        } finally {            try {                if (output != null) {                    output.close();                }            } catch (Exception e) {                e.printStackTrace();            }        }        return false;    }    /** * 判断SD卡是否存在 * * @ return */    private static boolean SDCardisExist() {        if (SDState.equals(Environment.MEDIA_MOUNTED)) {            return true;        } else            return false;    }    /** * 获取SD卡剩余容量大小(单位Byte) * * @return */    public static long getSDFreeSize() {        //取得SD卡文件路径        File path = Environment.getExternalStorageDirectory();        StatFs sf = new StatFs(path.getPath());        //获取单个数据块的大小(Byte)        long blockSize = sf.getBlockSize();        //空闲的数据块的数量        long freeBlocks = sf.getAvailableBlocks();        //返回SD卡空闲大小        return freeBlocks * blockSize;  //单位Byte        //return (freeBlocks * blockSize)/1024; //单位KB// return (freeBlocks * blockSize) / 1024 / 1024; //单位MB    }    /** * 获取SD卡总容量大小(单位Byte) * * @return */    public static long getSDAllSize() {        //取得SD卡文件路径        File path = Environment.getExternalStorageDirectory();        StatFs sf = new StatFs(path.getPath());        //获取单个数据块的大小(Byte)        long blockSize = sf.getBlockSize();        //获取所有数据块数        long allBlocks = sf.getBlockCount();        //返回SD卡大小        return allBlocks * blockSize; //单位Byte        //return (allBlocks * blockSize)/1024; //单位KB// return (allBlocks * blockSize) / 1024 / 1024; //单位MB    }    /** * 如果目录不存在,就创建目录 * * @param path 目录 * @return */    public static boolean createDirectoryIfNotExist(String path) {        File file = new File(path);        //如果文件夹不存在则创建        if (!file.exists() && !file.isDirectory()) {            return file.mkdirs();        } else {            Log.e("目录", "目录存在!");            return false;        }    }    /** * 如果文件不存在,就创建文件 * @param path 文件路径 * @return */    public static boolean createFileIfNotExist(String path) {        File file = new File(path);        try {            if (!file.exists()) {                return file.createNewFile();            } else {                Log.e("文件", "文件存在!");                return false;            }        } catch (Exception e) {            Log.e("error", e.getMessage());            return false;        }    }}

更多相关文章

  1. Android使用Retrofit上传单个文件以及多个文件
  2. Android检测版本更新(读取apk配置文件中的版本信息)
  3. android实现ftp上传、下载,支持文件夹
  4. android java 检测文件夹(目录)是否存在,不存在则创建
  5. android异步操作AsyncTask编写文件查看器
  6. android 之 选择文件
  7. Android的计量单位px,in,mm,pt,dp,dip,sp
  8. Android http文件上传-本地+服务器一条龙分析
  9. Android 可選文件格式瀏覽器

随机推荐

  1. 一些Andriod相关的网站
  2. Android子线程与子线程的通信
  3. Android基本之UI Layout
  4. Android实现电话状态监控
  5. android 播放视频保存的一些网页
  6. android多选联系人实现
  7. 有关Material Design新特性的详解。
  8. Power Profiles for Android
  9. Android(安卓)内存溢出解决方案(OOM) 整理
  10. android sqilte3数据库大小的测试