package com.example.gitnb.utils; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.Context; import android.os.Environment; import android.os.StatFs; import android.util.Log; public class FileUtils { private static final String TAG = "FileUtils"; 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()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static String read(Context context, String fileName) { try { FileInputStream in = context.openFileInput(fileName); return readInStream(in); } catch (Exception e) { e.printStackTrace(); } return ""; } public static String readInStream(InputStream 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(); } catch (IOException e) { Log.i("FileTest", e.getMessage()); } 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); } 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; } public static String getFileName(String filePath) { if (filePath == null || filePath.isEmpty()) return ""; return filePath.substring(filePath.lastIndexOf(File.separator) + 1); } public static boolean isExistDataCache(Context cxt, String file) { boolean exist = false; File data = cxt.getFileStreamPath(file); if(data.exists()) exist = true; return exist; } public static String getFileNameNoFormat(String filePath) { if (filePath == null || filePath.isEmpty()) { return ""; } int point = filePath.lastIndexOf('.'); return filePath.substring(filePath.lastIndexOf(File.separator) + 1, point); } public static String getFileFormat(String fileName) { if (fileName == null || fileName.isEmpty()) return ""; int point = fileName.lastIndexOf('.'); return fileName.substring(point + 1); } public static long getFileSize(String filePath) { long size = 0; File file = new File(filePath); if (file != null && file.exists()) { size = file.length(); } return size; } 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"; } } 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; } 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; } 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; } 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; } public static boolean checkFilePathExists(String path) { return new File(path).exists(); } 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); } 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; } /** * check if install sd card * * @return */ public static boolean checkSaveLocationExists() { String sDCardStatus = Environment.getExternalStorageState(); boolean status; if (sDCardStatus.equals(Environment.MEDIA_MOUNTED)) { status = true; } else status = false; return status; } public static boolean checkExternalSDExists() { Map<String, String> evn = System.getenv(); return evn.containsKey("SECONDARY_STORAGE"); } 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(); Log.d(TAG, "DirectoryManager deleteDirectory" + fileName); status = true; } catch (Exception e) { e.printStackTrace(); status = false; } } else status = false; } else status = false; return status; } 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 { Log.d(TAG, "DirectoryManager deleteFile " + fileName); newPath.delete(); status = true; } catch (SecurityException se) { se.printStackTrace(); status = false; } } else status = false; } else status = false; return status; } public static int deleteBlankPath(String path) { File f = new File(path); if (!f.canWrite()) { return 1; } if (f.list() != null && f.list().length > 0) { return 2; } if (f.delete()) { return 0; } return 3; } public static boolean reNamePath(String oldName, String newName) { File f = new File(oldName); return f.renameTo(new File(newName)); } public static boolean deleteFileWithPath(String filePath) { SecurityManager checker = new SecurityManager(); File f = new File(filePath); checker.checkDelete(filePath); if (f.isFile()) { Log.d(TAG, "DirectoryManager deleteFile " + filePath); f.delete(); return true; } return false; } public static void clearFileWithPath(String filePath) { List<File> files = FileUtils.listPathFiles(filePath); if (files.isEmpty()) { return; } for (File f : files) { if (f.isDirectory()) { clearFileWithPath(f.getAbsolutePath()); } else { f.delete(); } } } public static String getSDRoot() { return Environment.getExternalStorageDirectory().getAbsolutePath(); } public static String getExternalSDRoot() { Map<String, String> evn = System.getenv(); return evn.get("SECONDARY_STORAGE"); } public static List<String> listPath(String root) { List<String> allDir = new ArrayList<String>(); SecurityManager checker = new SecurityManager(); File path = new File(root); checker.checkRead(root); // 过滤掉以.�?始的文件�? if (path.isDirectory()) { for (File f : path.listFiles()) { if (f.isDirectory() && !f.getName().startsWith(".")) { allDir.add(f.getAbsolutePath()); } } } return allDir; } public static List<File> listPathFiles(String root) { List<File> allDir = new ArrayList<File>(); SecurityManager checker = new SecurityManager(); File path = new File(root); checker.checkRead(root); File[] files = path.listFiles(); for (File f : files) { if (f.isFile()) allDir.add(f); else listPath(f.getAbsolutePath()); } return allDir; } public enum PathStatus { SUCCESS, EXITS, ERROR } public static PathStatus createPath(String newPath) { File path = new File(newPath); if (path.exists()) { return PathStatus.EXITS; } if (path.mkdir()) { return PathStatus.SUCCESS; } else { return PathStatus.ERROR; } } public static long getCacheSize(Context cxt){ long fileSize = 0; File filesDir = cxt.getFilesDir(); File cacheDir = cxt.getCacheDir(); File externalCacheDir = cxt.getExternalCacheDir(); fileSize += getDirSize(filesDir); fileSize += getDirSize(cacheDir); fileSize += getDirSize(externalCacheDir); return fileSize; } public static String getPathName(String absolutePath) { int start = absolutePath.lastIndexOf(File.separator) + 1; int end = absolutePath.length(); return absolutePath.substring(start, end); } public static String getAppCache(Context context, String dir) { String savePath = context.getCacheDir().getAbsolutePath() + "/" + dir + "/"; File savedir = new File(savePath); if (!savedir.exists()) { savedir.mkdirs(); } savedir = null; return savePath; } public static int clearCacheFolder(File dir, long curTime) { int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { if (child.isDirectory()) { deletedFiles += clearCacheFolder(child, curTime); } if (child.lastModified() < curTime) { if (child.delete()) { deletedFiles++; } } } } catch(Exception e) { e.printStackTrace(); } } return deletedFiles; } public static void clearAppCache(Context cxt) { //AccountUtils.removeAll(cxt); clearCacheFolder(cxt.getFilesDir(),System.currentTimeMillis()); clearCacheFolder(cxt.getCacheDir(),System.currentTimeMillis()); clearCacheFolder(cxt.getExternalCacheDir(),System.currentTimeMillis()); } }