Android 文件读写工具类
16lz
2021-01-23
自己写的工具类,写的不好,慢慢修改。
记得加上权限
<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; } }}
更多相关文章
- Android使用Retrofit上传单个文件以及多个文件
- Android检测版本更新(读取apk配置文件中的版本信息)
- android实现ftp上传、下载,支持文件夹
- android java 检测文件夹(目录)是否存在,不存在则创建
- android异步操作AsyncTask编写文件查看器
- android 之 选择文件
- Android的计量单位px,in,mm,pt,dp,dip,sp
- Android http文件上传-本地+服务器一条龙分析
- Android 可選文件格式瀏覽器