Android 文件读写工具类

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

记得加上权限

<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;
        }
    }
}
时间: 2024-10-24 10:44:53

Android 文件读写工具类的相关文章

Android之文件读写工具类

本工具类永久维护,永久更新,如果各位读者发现有bug或者不合理之处,欢迎指正,博主将第一时间改正. 以下是主要内容,本类主要功能有: 1.创建文件功能: 2.向文件中写入字节数组: 3.向文件中写入字符串: 4.从文件中读取字节数组: 5.从文件中读取字符串: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; /** * 文件读写工具类 * * @author bear *

list集合、txt文件对比的工具类和文件读写工具类

工作上经常会遇到处理大数据的问题,下面两个工具类,是在处理大数据时编写的:推荐的是使用map的方式处理两个list数据,如果遇到list相当大数据这个方法就起到了作用,当时处理了两个十万级的list,使用改方法的变种搞定. 1.txt文件.list集合比较工具 <span style="font-family:KaiTi_GB2312;font-size:18px;">package com.hudong.util.other; import java.util.Colle

Spring-Boot ? ShapeFile文件读写工具类+接口调用

一.项目目录结构树 二.项目启动 三.往指定的shp文件里写内容 (1) json数据[Post] { "name":"test", "path":"c:/test", "geom":"MULTIPOLYGON(((101.870371 25.19228,101.873633 25.188183,101.880564 25.184416,101.886808 25.186028,101.89204

android 文件缓存工具类

/** * Json数据缓存的工具类 * */public class CacheDataSd { /** * * @param context 当前对象 * @param dir 创建的文件 * @param requesturl 标志字段 * @param jsondata json数据 */ public static void SaveSDByteArray(Context context, String dir, String requesturl, String jsondata)

properties文件读写工具类PropertiesUtil.java

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; /** * * @author * */ public class PropertiesUtil { private String prope

Android常用的工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.SerializeUtils.S

一个使用命令行编译Android项目的工具类

一个使用命令行编译Android项目的工具类 简介 编译apk项目需要使用的几个工具,基本都在sdk中,它们分别是(Windows系统): 1.aapt.exe 资源打包工具 2.android.jar Android编译工具 3.dx.bat dex文件生成工具 4.sdklib.jar 生成apk 5.jarsigner 签名工具 准备 在打包前,需要的环境如下: 1.JDK1.6+ 2.Android SDK 3.上述5个工具的路径 打包过程 1.生成R.java文件 比如: aapt p

java文件处理工具类

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileRea

iOS开发拓展篇—封装音频文件播放工具类

一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; - (id)initWithData:(NSData *)data error:(NSError **)outError; 准备播放(缓冲,提高播放的流畅性) - (BOOL)prepareToPlay;