• 工具类总结---(五)---SD卡文件管理


       里面注释很清楚了。。。

      

    package cgjr.com.cgjr.utils;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Environment;
    import android.util.Log;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.ByteArrayOutputStream;
    import java.io.CharArrayWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.Reader;
    import java.io.StringReader;
    import java.io.Writer;
    
    /**
     * 文件管理类    在以后的开发中也可以使用这个工具类,提高代码的利用性
     * 只要是对SD卡的操作
     * 1、获取SD卡路径   getSDPATH
     * 2、在SD卡上根据传入的目录名创建目录  createSDDir
     * 3、在创建上目录后可以在该目录上创建文件    createSDFile
     * 4、检测文件是否存在  isFileExist
     * 5、将一个InputStream写入到SD卡中   write2SDFromInput
     * 6、将一个字符流写入到SD卡 write2SDFromWrite
     * 注:如果要写入SD卡,只要调用write2SDFromInput函数即可
     *
     * @author Administrator
     */
    public class FileUtils {
        private static String SDPATH;
        private static final String TAG = "FileUtils";
    
        public FileUtils() {
            //得到当前设备外部存储设备的目录
            SDPATH = Environment.getExternalStorageDirectory() + File.separator;
        }
    
        /**
         * 获取当前SD卡的根目录
         *
         * @return
         */
        public String getSDPATH() {
            return SDPATH;
        }
    
        /**
         * SD卡上创建目录
         */
        public File createSDDir(String dirName) {
            File dir = new File(SDPATH + dirName);
            Log.i(TAG, "createSDDir " + SDPATH + dirName);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            return dir;
        }
    
        /**
         * SD卡上创建文件
         */
        public File createSDFile(String fileName) throws IOException {
            File file = new File(SDPATH + fileName);
            Log.i(TAG, "createSDFile " + SDPATH + fileName);
            file.createNewFile();
            return file;
        }
    
    
        /**
         * 判断SD卡上的文件是否存在
         */
        public boolean isFileExist(String fileName) {
            File file = new File(SDPATH + fileName);
            return file.exists();
        }
    
        /**
         * 将一个InputStream字节流写入到SD卡中
         */
        public File write2SDFromInput(String Path, String FileName, InputStream input) {
            File file = null;
            OutputStream output = null;   //创建一个写入字节流对象
            try {
                createSDDir(Path);    //根据传入的路径创建目录
                file = createSDFile(Path + FileName); //根据传入的文件名创建
                output = new FileOutputStream(file);
                byte buffer[] = new byte[4 * 1024];   //每次读取4K
                int num = 0;      //需要根据读取的字节大小写入文件
                while ((num = (input.read(buffer))) != -1) {
                    output.write(buffer, 0, num);
                }
                output.flush();  //清空缓存
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (output != null)
                        output.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return file;
        }
    
        /**
         * 把传入的字符流写入到SD卡中
         *
         * @param Path
         * @param FileName
         * @param input
         * @return
         */
        public File write2SDFromWrite(String Path, String FileName, BufferedReader input) {
            File file = null;
            FileWriter output = null;   //创建一个写入字符流对象
            BufferedWriter bufw = null;
            try {
                createSDDir(Path);    //根据传入的路径创建目录
                file = createSDFile(Path + FileName); //根据传入的文件名创建
                output = new FileWriter(file);
                bufw = new BufferedWriter(output);
                String line = null;
                while ((line = (input.readLine())) != null) {
                    bufw.write(line);
                    bufw.newLine();
                }
                bufw.flush();  //清空缓存
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (bufw != null)
                        bufw.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return file;
        }
    
        /**
         * 从文本文件对象中读取内容并转换为字符数组
         *
         * @param file File 对象
         * @return 读到的字符数据
         */
        public static char[] readChars(File file) {
            CharArrayWriter caw = new CharArrayWriter();
            try {
                Reader fr = new FileReader(file);
                Reader in = new BufferedReader(fr);
                int count = 0;
                char[] buf = new char[16384];
                while ((count = in.read(buf)) != -1) {
                    if (count > 0) caw.write(buf, 0, count);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return caw.toCharArray();
        }
    
        /**
         * 从字符串对象中读取内容并转换为字符数组
         *
         * @param string 在读的String数据
         * @return 字符数组
         */
        public static char[] readChars(String string) {
            CharArrayWriter caw = new CharArrayWriter();
            try {
                Reader sr = new StringReader(string.trim());
                Reader in = new BufferedReader(sr);
                int count = 0;
                char[] buf = new char[16384];
                while ((count = in.read(buf)) != -1) {
                    if (count > 0) caw.write(buf, 0, count);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return caw.toCharArray();
        }
    
        /**
         * 从二进制文件对象中读取内容并转换为字节数组
         *
         * @param file 要读取的File对象
         * @return 读取后的字节数据
         */
        public static byte[] readBytes(File file) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            try {
                InputStream fis = new FileInputStream(file);
                InputStream is = new BufferedInputStream(fis);
                int count = 0;
                byte[] buf = new byte[16384];
                while ((count = is.read(buf)) != -1) {
                    if (count > 0) baos.write(buf, 0, count);
                }
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return baos.toByteArray();
        }
    
        /**
         * 写字节数组内容到二进制文件
         *
         * @param file File对象
         * @param data 输出字节数组
         */
        public static void writeBytes(File file, byte[] data) {
            try {
                OutputStream fos = new FileOutputStream(file);
                OutputStream os = new BufferedOutputStream(fos);
                os.write(data);
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 写字符数组内容到文本文件
         *
         * @param file File对象
         * @param data 输出字节数组
         */
        public static void writeChars(File file, char[] data) {
            try {
                Writer fos = new FileWriter(file);
                Writer os = new BufferedWriter(fos);
                os.write(data);
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
        /**
         * Environment.getDataDirectory() +path 读取文件
         *
         * @see #localWriter(Bitmap, String, String)
         */
        public static Bitmap localReader(String name, String path) {
            File fileRe = null;
            try {
                File dataDirectory = Environment.getExternalStorageDirectory();
                if (dataDirectory.exists()) {
                    fileRe = new File(dataDirectory.getPath() + File.separator + path + File.separator + name);
                    // 文件不存在
                    if (fileRe == null || !fileRe.exists()) {
                        return null;
                    } else {
                        return BitmapFactory.decodeFile(fileRe.getPath());
                    }
                }
            } catch (Exception e) {
                return null;
            }
            return null;
        }
    
        public static Bitmap localReaderByPath(String name, String path,Context context) {
            File fileRe = null;
    
    
            try {
                fileRe = new File(path + File.separator + MD5Util.md5(name));
                // 文件不存在
                if (fileRe == null || !fileRe.exists()) {
                    return null;
                } else {
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inJustDecodeBounds = true;
                    BitmapFactory.decodeFile(fileRe.getPath(), options);
                    int width = options.outWidth;
                    int height = options.outHeight;
                    int inSampleSize = 1;
                    int size = width /context.getResources().getDisplayMetrics().widthPixels;
                    if (size > 0) {
                        inSampleSize = size;
                    }
                    Log.i("AsyncImageLoader", "height is: " + height + " width is: " + width + "sampleSize: " + inSampleSize);
                    options.inPurgeable = true;
                    options.inInputShareable = true;
                    options.inSampleSize = inSampleSize;
                    options.inJustDecodeBounds = false;
                    return BitmapFactory.decodeFile(fileRe.getPath(),options);
                }
            } catch (Exception e) {
                return null;
            }
    
        }
    
        /**
         * Environment.getDataDirectory()
         *
         * @param bm
         * @param name
         * @param path
         * @return
         * @see #localReader(String, String)
         */
        public static boolean localWriter(Bitmap bm, String name, String path) {
            File dataDirectory = Environment.getExternalStorageDirectory();
            try {
                if (dataDirectory.exists()) {
                    String s = dataDirectory.getPath() + File.separator + path + File.separator;
                    File write = new File(s);
                    if (!write.exists()) {
                        if (write.mkdirs()) {
                            FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
                            fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
                            fileOutputStream.close();
                        }
                    } else {
                        FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
                        fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
                        fileOutputStream.close();
                    }
                }
            } catch (Exception e) {
                return false;
            }
            return true;
        }
    
        /**
         * Environment.getDataDirectory()
         *
         * @param bm
         * @param name
         * @param path
         * @return
         * @see #localReader(String, String)
         */
        public static boolean localWriterByPath(Bitmap bm, String name, String path) {
            try {
                String s = path + File.separator;
                File write = new File(s);
                if (!write.exists()) {
                    if (write.mkdirs()) {
                        FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
                        fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
                        fileOutputStream.close();
                    }
                } else {
                    FileOutputStream fileOutputStream = new FileOutputStream(new File(s + MD5Util.md5(name)));
                    fileOutputStream.write(StreamUtils.bitmap2Bytes(bm));
                    fileOutputStream.close();
                }
            } catch (Exception e) {
                return false;
            }
            return true;
        }
    }
  • 相关阅读:
    Java第三次作业第四题
    Java第三次作业第三题
    Java第三次作业第二题
    Java第三次作业第一题
    具有注册、登陆以及后台管理功能的web开发
    KMP算法
    二叉排序树-插入算法
    算法刷题-1-单链表操作
    最牛X的编码套路
    day03 高级模块
  • 原文地址:https://www.cnblogs.com/beigongfengchen/p/5454005.html
Copyright © 2020-2023  润新知