package com.jacky.compatible.launcher.utils; import android.content.Context; import android.os.Environment; import android.os.StatFs; import android.util.Log; import com.jacky.launcher.BuildConfig; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * 读取文件工具类 */ public class FileUtils { private final static String TAG = "FileUitl------读取文件工具类"; private static String path = "/sdcard/GMYZ/log/"; private static String padFilePath = "/sdcard/driver.ini"; /** * 写文本文件 在Android系统中,文件保存在 /data/data/PACKAGE_NAME/files 目录下 * * @param context */ public static void write(Context context, String fileName, String content) { if (content == null) content = ""; try { FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); fos.write(content.getBytes(StandardCharsets.UTF_8)); fos.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 读取文本文件 * * @param context * @param fileName * @return */ public static String read(Context context, String fileName) { try { FileInputStream in = context.openFileInput(fileName); return readInStream(in); } catch (Exception e) { return ""; } } private static String readInStream(FileInputStream inStream) { try { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[512]; int length = -1; while ((length = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, length); } outStream.close(); inStream.close(); return outStream.toString("UTF-8"); } catch (IOException e) { } return null; } public static File createFile(String folderPath, String fileName) { File destDir = new File(folderPath); if (!destDir.exists()) { destDir.mkdirs(); } return new File(folderPath, fileName + fileName); } /** * @param buffer * @param folder * @param fileName * @return */ public static boolean writeFile(byte[] buffer, String folder, String fileName) { boolean writeSucc = false; boolean sdCardExist = Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); String folderPath = ""; if (sdCardExist) { folderPath = Environment.getExternalStorageDirectory() + File.separator + folder + File.separator; } else { writeSucc = false; } File fileDir = new File(folderPath); if (!fileDir.exists()) { fileDir.mkdirs(); } File file = new File(folderPath + fileName); FileOutputStream out = null; try { out = new FileOutputStream(file); out.write(buffer); writeSucc = true; } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } return writeSucc; } /** * 根据文件绝对路径获取文件名 * * @param filePath * @return */ public static String getFileName(String filePath) { if (null == filePath || "".equals(filePath)) return ""; return filePath.substring(filePath.lastIndexOf(File.separator) + 1); } /** * 根据文件的绝对路径获取文件名但不包含扩展名 * * @param filePath * @return */ public static String getFileNameNoFormat(String filePath) { if (null == filePath || "".equals(filePath)) { return ""; } int point = filePath.lastIndexOf('.'); return filePath.substring(filePath.lastIndexOf(File.separator) + 1, point); } /** * 获取文件扩展名 * * @param fileName * @return */ public static String getFileFormat(String fileName) { if (null == fileName || "".equals(fileName)) return ""; int point = fileName.lastIndexOf('.'); return fileName.substring(point + 1); } /** * 获取文件大小 * * @param filePath * @return */ public static long getFileSize(String filePath) { long size = 0; File file = new File(filePath); if (file != null && file.exists()) { size = file.length(); } return size; } /** * 获取文件大小 * * @param size 字节 * @return */ public static String getFileSize(long size) { if (size <= 0) return "0"; java.text.DecimalFormat df = new java.text.DecimalFormat("##.##"); float temp = (float) size / 1024; if (temp >= 1024) { return df.format(temp / 1024) + "M"; } else { return df.format(temp) + "K"; } } /** * 转换文件大小 * * @param fileS * @return B/KB/MB/GB */ public static String formatFileSize(long fileS) { java.text.DecimalFormat df = new java.text.DecimalFormat("#.00"); String fileSizeString = ""; if (fileS < 1024) { fileSizeString = df.format((double) fileS) + "B"; } else if (fileS < 1048576) { fileSizeString = df.format((double) fileS / 1024) + "KB"; } else if (fileS < 1073741824) { fileSizeString = df.format((double) fileS / 1048576) + "MB"; } else { fileSizeString = df.format((double) fileS / 1073741824) + "G"; } return fileSizeString; } /** * 获取目录文件大小 * * @param dir * @return */ public static long getDirSize(File dir) { if (dir == null) { return 0; } if (!dir.isDirectory()) { return 0; } long dirSize = 0; File[] files = dir.listFiles(); for (File file : files) { if (file.isFile()) { dirSize += file.length(); } else if (file.isDirectory()) { dirSize += file.length(); dirSize += getDirSize(file); // 递归调用继续统计 } } return dirSize; } /** * 获取目录文件个数 * * @param * @return */ public long getFileList(File dir) { long count = 0; File[] files = dir.listFiles(); count = files.length; for (File file : files) { if (file.isDirectory()) { count = count + getFileList(file);// 递归 count--; } } return count; } public static byte[] toBytes(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); int ch; while ((ch = in.read()) != -1) { out.write(ch); } byte[] buffer = out.toByteArray(); out.close(); return buffer; } /** * 检查文件是否存在 * * @param name * @return */ public static boolean checkFileExists(String name) { boolean status; if (!name.equals("")) { File path = Environment.getExternalStorageDirectory(); File newPath = new File(path.toString() + name); status = newPath.exists(); } else { status = false; } return status; } /** * 计算SD卡的剩余空间 * * @return 返回-1,说明没有安装sd卡 */ public static long getFreeDiskSpace() { String status = Environment.getExternalStorageState(); long freeSpace = 0; if (status.equals(Environment.MEDIA_MOUNTED)) { try { File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long availableBlocks = stat.getAvailableBlocks(); freeSpace = availableBlocks * blockSize / 1024; } catch (Exception e) { e.printStackTrace(); } } else { return -1; } return freeSpace; } /** * 新建目录 * * @param directoryName * @return */ public static boolean createDirectory(String directoryName) { boolean status; if (!directoryName.equals("")) { File path = Environment.getExternalStorageDirectory(); File newPath = new File(path.toString() + directoryName); status = newPath.mkdir(); status = true; } else status = false; return status; } /** * 检查是否安装SD卡 * * @return */ public static boolean checkSaveLocationExists() { String sDCardStatus = Environment.getExternalStorageState(); boolean status; if (sDCardStatus.equals(Environment.MEDIA_MOUNTED)) { status = true; } else status = false; return status; } /** * 删除目录(包括:目录里的所有文件) * * @param fileName * @return */ public static boolean deleteDirectory(String fileName) { boolean status; SecurityManager checker = new SecurityManager(); if (!fileName.equals("")) { File path = Environment.getExternalStorageDirectory(); File newPath = new File(path.toString() + fileName); checker.checkDelete(newPath.toString()); if (newPath.isDirectory()) { String[] listfile = newPath.list(); // delete all files within the specified directory and then // delete the directory try { for (int i = 0; i < listfile.length; i++) { File deletedFile = new File(newPath.toString() + "/" + listfile[i].toString()); deletedFile.delete(); } newPath.delete(); status = true; } catch (Exception e) { e.printStackTrace(); status = false; } } else status = false; } else status = false; return status; } /** * 删除文件 * * @param fileName * @return */ public static boolean deleteFile(String fileName) { boolean status; SecurityManager checker = new SecurityManager(); if (!fileName.equals("")) { File path = Environment.getExternalStorageDirectory(); File newPath = new File(path.toString() + fileName); checker.checkDelete(newPath.toString()); if (newPath.isFile()) { try { newPath.delete(); status = true; } catch (SecurityException se) { se.printStackTrace(); status = false; } } else status = false; } else status = false; return status; } /** * @param msgID * @param log * @param isLog * @return */ public static String saveLog(String msgID, String log, boolean isLog, String fileName) { if (!isLog) { return null; } SimpleDateFormat logTime = new SimpleDateFormat("yyyyMMddHHmmss"); Date logD = new Date(System.currentTimeMillis()); StringBuffer sb = new StringBuffer(); if (msgID != null && !msgID.equals("")) { sb.append(logTime.format(logD) + "【" + msgID + "】\n"); } else { sb.append(logTime.format(logD) + "\t\t"); } String logStr = ""; String splitStr = "body"; String[] tempStr = log.split(splitStr); if (tempStr.length > 1) { logStr += tempStr[0] + "\n" + splitStr; String body = tempStr[1].replaceAll(",", ""); tempStr = body.split("]"); for (int i = 0; i < tempStr.length; i++) { if (i != tempStr.length - 2) { logStr += tempStr[i] + "],\n"; } else { logStr += tempStr[i] + ""; } } sb.append(logStr.substring(0, logStr.length() - 4)); } else { sb.append(log); } sb.append("\n"); SimpleDateFormat logFt = new SimpleDateFormat("yyyyMMdd"); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); printWriter.close(); try { long timestamp = System.currentTimeMillis(); Date d = new Date(timestamp); String time = logFt.format(d); if (null == fileName || fileName.equals("")) { fileName = "log"; } fileName += ("-" + time + ".txt"); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } File f = new File(path + fileName); if (!f.exists()) { f.createNewFile(); } FileOutputStream fost = new FileOutputStream(f, true); BufferedWriter myo = new BufferedWriter(new OutputStreamWriter( fost, "GBK")); myo.write(sb.toString()); myo.close(); } return fileName; } catch (Exception e) { if (BuildConfig.DEBUG) Log.e(TAG, "an error occured while writing file...", e); } return null; } public static String saveLog(String log, boolean isLog, String fileName) { return saveLog(log, "", isLog, fileName); } public static String saveLog(String log, boolean isLog) { return saveLog(log, "", isLog, null); } public String readSDFile(String fileName) { StringBuffer sb = new StringBuffer(); File file = new File(padFilePath + "//" + fileName); if (!file.exists()) { return ""; } try { FileInputStream fis = new FileInputStream(file); int c; while ((c = fis.read()) != -1) { sb.append((char) c); } fis.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } public static List<File> list(File dir, String nametxt, String ext, String type, List<File> fs) { listFile(dir, nametxt, type, ext, fs); File[] all = dir.listFiles(); // 递归获得当前目录的所有子目录 for (int i = 0; i < all.length; i++) { File d = all[i]; if (d.isDirectory()) { list(d, nametxt, ext, type, fs); } } return null; // 遍历子目,列出每个子目录的文�? } /** * @param dir 根目 * @param nametxt 文件名中包含的关键字 * @param type 文件夹的类型 * @param ext 后缀 * @param fs 返回的结 * @return */ private static List<File> listFile(File dir, String nametxt, String type, String ext, List<File> fs) { File[] all = dir.listFiles(new Fileter(ext)); for (int i = 0; i < all.length; i++) { File d = all[i]; if (d.getName().toLowerCase().indexOf(nametxt.toLowerCase()) >= 0) { if (type.equals("1")) { fs.add(d); } else if (d.isDirectory() && type.equals("2")) { fs.add(d); } else if (!d.isDirectory() && type.equals("3")) { fs.add(d); } } } return fs; } public static boolean delFile(String filePathAndName) { boolean bea = false; try { String filePath = filePathAndName; File myDelFile = new File(filePath); if (myDelFile.exists()) { myDelFile.delete(); bea = true; } else { bea = false; } } catch (Exception e) { e.printStackTrace(); } return bea; } static class Fileter implements FilenameFilter { private final String ext; public Fileter(String ext) { this.ext = ext; } @Override public boolean accept(File dir, String name) { return name.endsWith(ext); } } public static void copyFile(String oldPathFile, String newPathFile) { try { int bytesum = 0; int byteread = 0; File oldfile = new File(oldPathFile); if (oldfile.exists()) { // 文件存在 InputStream inStream = new FileInputStream(oldPathFile); // 读入源文�? File n = new File(newPathFile); if (!n.exists()) { n.createNewFile(); } FileOutputStream fs = new FileOutputStream(newPathFile); byte[] buffer = new byte[1444]; while ((byteread = inStream.read(buffer)) != -1) { bytesum += byteread; // 字节 文件大小 fs.write(buffer, 0, byteread); } fs.flush(); fs.close(); inStream.close(); } } catch (Exception e) { e.printStackTrace(); } } public static void moveFile(String oldPath, String newPath) { copyFile(oldPath, newPath); delFile(oldPath); } /** * 修改文件权限 * * @param file */ public static void modifyFile(File file) { Process process = null; try { String command = "chmod -R 777 " + file.getAbsolutePath(); Runtime runtime = Runtime.getRuntime(); process = runtime.exec(command); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } } }