package com.hdl.linkpm.sdk.utils; import android.content.Context; import android.content.res.AssetManager; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * Created by hxb on 2022/2/24. */ public class HDLFileUtils { /** * 创建文件夹 * * @param filesPath * @return */ public static boolean createOrExistsPrivateFolder(String filesPath) { File dir = new File(filesPath); return createOrExistsFolder(dir); } public static String getJson(String fileName, Context context) { //将json数据变成字符串 StringBuilder stringBuilder = new StringBuilder(); try { //获取assets资源管理器 AssetManager assetManager = context.getAssets(); //通过管理器打开文件并读取 BufferedReader bf = new BufferedReader(new InputStreamReader( assetManager.open(fileName))); String line; while ((line = bf.readLine()) != null) { stringBuilder.append(line); } } catch (IOException e) { e.printStackTrace(); } return stringBuilder.toString(); } /** * 创建文件夹 * * @param file * @return */ public static boolean createOrExistsFolder(File file) { if (file == null) return false; boolean result = false; if (isFileExists(file) && isDirectory(file)) { // 如果file存在且是文件夹,返回true return true; } // 如果文件夹不存在,创建文件夹 if (file.mkdirs()) { // 创建成功返回true result = true; } else { // 创建失败返回false result = false; } return result; } public static boolean writeFile(String path, InputStream inputStream) { FileOutputStream fop = null; try { File file = new File(path); fop = new FileOutputStream(file); if (!file.exists()) { file.createNewFile(); } byte[] inBytes = new byte[1024*5]; int len = 0; while (0 < (len = inputStream.read(inBytes, 0, inBytes.length))) { fop.write(inBytes, 0, len); fop.flush(); } return true; } catch (IOException e) { e.printStackTrace(); return false; } finally { try { if (fop != null) { fop.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 文件是否存在 * * @param file * @return */ public static boolean isFileExists(File file) { if (file == null) return false; return file.exists(); } /** * 文件夹是否存在 * * @param file * @return */ public static boolean isDirectory(File file) { if (file == null) return false; return file.isDirectory(); } public static void byteToFile(byte[] buf, String filePath, String fileName) { BufferedOutputStream bos = null; FileOutputStream fos = null; File file; try { createOrExistsPrivateFolder(filePath); file = new File(filePath + File.separator + fileName); fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(buf); } catch (Exception ignored) { } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 删除文件,可以是单个文件或文件夹 * * @param fileName * 待删除的文件名 * @return 文件删除成功返回true,否则返回false */ public static boolean delete(String fileName) { File file = new File(fileName); if (!file.exists()) { System.out.println("删除文件失败:" + fileName + "文件不存在"); return false; } else { if (file.isFile()) { return deleteFile(fileName); } else { return deleteDirectory(fileName); } } } /** * 删除单个文件 * * @param file 被删除文件 * @return 单个文件删除成功返回true,否则返回false */ public static boolean deleteFile(File file) { if (file.isFile() && file.exists()) { file.delete(); System.out.println("删除单个文件" + file.getName() + "成功!"); return true; } else { System.out.println("删除单个文件" + file.getName() + "失败!"); return false; } } /** * 删除单个文件 * * @param fileName * 被删除文件的文件名 * @return 单个文件删除成功返回true,否则返回false */ public static boolean deleteFile(String fileName) { File file = new File(fileName); if (file.isFile() && file.exists()) { file.delete(); System.out.println("删除单个文件" + fileName + "成功!"); return true; } else { System.out.println("删除单个文件" + fileName + "失败!"); return false; } } /** * 删除目录(文件夹)以及目录下的文件 * * @param dir * 被删除目录的文件路径 * @return 目录删除成功返回true,否则返回false */ public static boolean deleteDirectory(String dir) { // 如果dir不以文件分隔符结尾,自动添加文件分隔符 if (!dir.endsWith(File.separator)) { dir = dir + File.separator; } File dirFile = new File(dir); // 如果dir对应的文件不存在,或者不是一个目录,则退出 if (!dirFile.exists() || !dirFile.isDirectory()) { System.out.println("删除目录失败" + dir + "目录不存在!"); return false; } boolean flag = true; // 删除文件夹下的所有文件(包括子目录) File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) { // 删除子文件 if (files[i].isFile()) { flag = deleteFile(files[i].getAbsolutePath()); if (!flag) { break; } } // 删除子目录 else { flag = deleteDirectory(files[i].getAbsolutePath()); if (!flag) { break; } } } if (!flag) { System.out.println("删除目录失败"); return false; } // 删除当前目录 if (dirFile.delete()) { System.out.println("删除目录" + dir + "成功!"); return true; } else { System.out.println("删除目录" + dir + "失败!"); return false; } } // 删除文件夹 // param folderPath 文件夹完整绝对路径 public static void delFolder(String folderPath) { try { delAllFile(folderPath); // 删除完里面所有内容 String filePath = folderPath; filePath = filePath.toString(); File myFilePath = new File(filePath); myFilePath.delete(); // 删除空文件夹 } catch (Exception e) { e.printStackTrace(); } } // 删除指定文件夹下所有文件 // param path 文件夹完整绝对路径 public static boolean delAllFile(String path) { boolean flag = false; File file = new File(path); if (!file.exists()) { return flag; } if (!file.isDirectory()) { return flag; } String[] tempList = file.list(); File temp = null; for (int i = 0; i < tempList.length; i++) { if (path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (temp.isFile()) { temp.delete(); } if (temp.isDirectory()) { delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件 delFolder(path + "/" + tempList[i]);// 再删除空文件夹 flag = true; } } return flag; } }