美文网首页
FileUnitls一个读写安卓文件的类

FileUnitls一个读写安卓文件的类

作者: cc_And | 来源:发表于2019-10-28 09:08 被阅读0次
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Environment;
    import android.util.Log;
    import android.widget.Toast;
    
    import com.blankj.utilcode.util.FileUtils;
    import com.bw.system.daomain.HomeAppBean;
    import com.bw.system.daomain.SignatureBean;
    import com.bw.system.daomain.SignaturePersonBean;
    
    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.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OptionalDataException;
    import java.io.OutputStream;
    import java.io.StreamCorruptedException;
    import java.nio.channels.FileChannel;
    import java.util.ArrayList;
    import java.util.List;
    
    /*
     *@Auther:CC
     *@Date: 2019/10/19
     *@Time:15:55
     *@Description:${文件工具类}
     * */public class FilesUntils {
        /**
         * 获取文件夹下有图片的集合
         *
         * @return
         */
        public static List<String> getImagePathFromSD(String filePath) {
            // 图片列表
            List<String> imagePathList = new ArrayList<String>();
            // 得到sd卡内image文件夹的路径   File.separator(/)
            //String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/leader/signature";
            // 得到该路径文件夹下所有的文件
            File fileAll = new File(filePath);
            File[] files = fileAll.listFiles();
            // 将所有的文件存入ArrayList中,并过滤所有图片格式的文件
            for (int i = 0; i < files.length; i++) {
                File file = files[i];
                if (checkIsImageFile(file.getPath())) {
                    imagePathList.add(file.getPath());
                }
            }
            // 返回得到的图片列表
            return imagePathList;
        }
    
        /**
         * 检查扩展名,得到图片格式的文件
         *
         * @param fName 文件名
         * @return
         */
        @SuppressLint("DefaultLocale")
        private static boolean checkIsImageFile(String fName) {
            boolean isImageFile = false;
            // 获取扩展名
            String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
                    fName.length()).toLowerCase();
            if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")
                    || FileEnd.equals("jpeg") || FileEnd.equals("bmp")) {
                isImageFile = true;
            } else {
                isImageFile = false;
            }
            return isImageFile;
        }
    
        /**
         * 删除文件,可以是文件或文件夹
         *
         * @param delFile 要删除的文件夹或文件名
         * @return 删除成功返回true,否则返回false
         */
        public static boolean delete(String delFile) {
            File file = new File(delFile);
            if (!file.exists()) {
                Log.d("FilesUntils", "删除文件失败:" + delFile + "不存在!");
                return false;
            } else {
                if (file.isFile())
                    return deleteSingleFile(delFile);
                else
                    return deleteDirectory(delFile);
            }
        }
    
        /**
         * 删除单个文件
         *
         * @param filePath$Name 要删除的文件的文件名
         * @return 单个文件删除成功返回true,否则返回false
         */
        public static boolean deleteSingleFile(String filePath$Name) {
            File file = new File(filePath$Name);
            // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
            if (file.exists() && file.isFile()) {
                if (file.delete()) {
                    Log.e("--Method--", "Copy_Delete.deleteSingleFile: 删除单个文件" + filePath$Name + "成功!");
                    return true;
                } else {
                    Log.d("FilesUntils", "删除单个文件" + filePath$Name + "失败!");
                    return false;
                }
            } else {
                Log.d("FilesUntils", "删除单个文件失败:" + filePath$Name + "不存在!");
                return false;
            }
        }
    
        /**
         * 删除目录及目录下的文件
         *
         * @param filePath 要删除的目录的文件路径
         * @return 目录删除成功返回true,否则返回false
         */
        public static boolean deleteDirectory(String filePath) {
            // 如果dir不以文件分隔符结尾,自动添加文件分隔符
            if (!filePath.endsWith(File.separator))
                filePath = filePath + File.separator;
            File dirFile = new File(filePath);
            // 如果dir对应的文件不存在,或者不是一个目录,则退出
            if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
                Log.d("FilesUntils", "删除目录失败:" + filePath + "不存在!");
                return false;
            }
            boolean flag = true;
            // 删除文件夹中的所有文件包括子目录
            File[] files = dirFile.listFiles();
            for (File file : files) {
                // 删除子文件
                if (file.isFile()) {
                    flag = deleteSingleFile(file.getAbsolutePath());
                    if (!flag)
                        break;
                }
                // 删除子目录
                else if (file.isDirectory()) {
                    flag = deleteDirectory(file
                            .getAbsolutePath());
                    if (!flag)
                        break;
                }
            }
            if (!flag) {
                Log.d("FilesUntils", "删除目录失败!");
                return false;
            }
            // 删除当前目录
            if (dirFile.delete()) {
                Log.e("--Method--", "Copy_Delete.deleteDirectory: 删除目录" + filePath + "成功!");
                return true;
            } else {
                Log.d("FilesUntils", "删除目录:" + filePath + "失败!");
                return false;
            }
        }
    
        /**
         * 读取sd卡文件里的集合
         *
         * @param fileName 文件名
         * @return
         */
        @SuppressWarnings("unchecked")
        public static List<HomeAppBean> readListFromSdCard(String fileName) {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  //检测sd卡是否存在
                List<HomeAppBean> list;
                File sdCardDir = Environment.getExternalStorageDirectory();
                File sdFile = new File(sdCardDir, fileName);
                try {
                    FileInputStream fis = new FileInputStream(sdFile);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    list = (List<HomeAppBean>) ois.readObject();
                    fis.close();
                    ois.close();
                    return list;
                } catch (StreamCorruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (OptionalDataException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                }
            } else {
                return null;
            }
        }
    
        /**
         * 读取文件
         *
         * @param fileName
         * @return
         */
        public static List<SignaturePersonBean> readTemporaryList(String fileName) {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  //检测sd卡是否存在
                List<SignaturePersonBean> list;
                File sdCardDir = Environment.getExternalStorageDirectory();
                File sdFile = new File(sdCardDir, fileName);
                try {
                    FileInputStream fis = new FileInputStream(sdFile);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    list = (List<SignaturePersonBean>) ois.readObject();
                    fis.close();
                    ois.close();
                    return list;
                } catch (StreamCorruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (OptionalDataException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return null;
                }
            } else {
                return null;
            }
        }
    
        /**
         * 写入集合到Sd卡文件
         *
         * @param fileName
         * @param list
         * @return
         */
        public static boolean writeListIntoSDcard(String fileName, List<HomeAppBean> list) {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                File sdCardDir = Environment.getExternalStorageDirectory();//获取sd卡目录
                File sdFile = new File(sdCardDir, fileName);
                try {
                    FileOutputStream fos = new FileOutputStream(sdFile);
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    oos.writeObject(list);//写入
                    fos.close();
                    oos.close();
                    return true;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return false;
                }
            } else {
                return false;
            }
        }
    
        /**
         * 保存文件到集合Sd卡
         *
         * @param fileName
         * @param list
         * @return
         */
        public static boolean saveListtoSDcard(String fileName, List<SignaturePersonBean> list) {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                File sdCardDir = Environment.getExternalStorageDirectory();//获取sd卡目录
                File sdFile = new File(sdCardDir, fileName);
                try {
                    FileOutputStream fos = new FileOutputStream(sdFile);
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    oos.writeObject(list);//写入
                    fos.close();
                    oos.close();
                    return true;
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return false;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    return false;
                }
            } else {
                return false;
            }
        }
    
        /**
         * bipmap转文件保存到sd卡
         *
         * @param bitmap
         * @throws IOException
         */
        private void saveBitmap(Bitmap bitmap, String Filepath,Context context) throws IOException {
            File file = new File(Filepath);
            if (file.exists()) {
                file.delete();
            }
            FileOutputStream out;
            try {
                out = new FileOutputStream(file);
                if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {
                    out.flush();
                    out.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            scanPhoto(context, Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "一级目录" + File.separator + "二级目录" + File.separator + ".PNG");
        }
    
        /**
         * 让Gallery相册上能马上看到该图片
         */
        private static void scanPhoto(Context ctx, String imgFileName) {
            Intent mediaScanIntent = new Intent(
                    Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            File file = new File(imgFileName);
            Uri contentUri = Uri.fromFile(file);
            mediaScanIntent.setData(contentUri);
            ctx.sendBroadcast(mediaScanIntent);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:FileUnitls一个读写安卓文件的类

          本文链接:https://www.haomeiwen.com/subject/tkevvctx.html