文件管理器源码分析(五)

来源:互联网 发布:csgofps优化cfg 编辑:程序博客网 时间:2024/05/26 09:57
/** * 这个文件夹里储的内容是app2sd产生的文件夹,也就是是你手机上所安装到SD的应用程序的缓存文件夹。 * androidsecure文件可以删除吗? *如果删除之后,软件不能正常使用,和系统没关系。 *话除能导致移sd损坏,数据丢失,并不会造成什么严重后果。 * 只要把移sd损坏程,重装,手机就完全没损伤,文件夹也会在再次app2sd时自重建 */public class Util {    private static String ANDROID_SECURE = "/mnt/sdcard/.android_secure";    private static final String LOG_TAG = "Util";    //SD态,mounted”表示    public static boolean isSDCardReady() {        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);    }    // if path1 contains path2    public static boolean containsPath(String path1, String path2) {        String path = path2;        while (path != null) {            if (path.equalsIgnoreCase(path1))                return true;            if (path.equals(GlobalConsts.ROOT_PATH))                break;            path = new File(path).getParent();        }        return false;    }    //2个路径加的需要加文件分隔符    public static String makePath(String path1, String path2) {        if (path1.endsWith(File.separator))            return path1 + path2;        return path1 + File.separator + path2;    }    //SD    public static String getSdDirectory() {        return Environment.getExternalStorageDirectory().getPath();    }    //判断1个文件是普通文件ANDROID_SECURE下的文件不是普通    public static boolean isNormalFile(String fullName) {        return !fullName.equals(ANDROID_SECURE);    }    //根据文件路径,获Java文件File再包装成FileInfo    public static FileInfo GetFileInfo(String filePath) {        File lFile = new File(filePath);        if (!lFile.exists())            return null;        FileInfo lFileInfo = new FileInfo();        lFileInfo.canRead = lFile.canRead();        lFileInfo.canWrite = lFile.canWrite();        lFileInfo.isHidden = lFile.isHidden();        lFileInfo.fileName = Util.getNameFromFilepath(filePath);        lFileInfo.ModifiedDate = lFile.lastModified();        lFileInfo.IsDir = lFile.isDirectory();        lFileInfo.filePath = filePath;        lFileInfo.fileSize = lFile.length();        return lFileInfo;    }    //根据FileFilenameFilter项,获得包装FileInfo    //需要注意多少如果File是个Count当前目录下的文件的个数。如果普通文件文件大小。    //这个知道Count字段义了    public static FileInfo GetFileInfo(File f, FilenameFilter filter, boolean showHidden) {        FileInfo lFileInfo = new FileInfo();        String filePath = f.getPath();        File lFile = new File(filePath);        lFileInfo.canRead = lFile.canRead();        lFileInfo.canWrite = lFile.canWrite();        lFileInfo.isHidden = lFile.isHidden();        lFileInfo.fileName = f.getName();        lFileInfo.ModifiedDate = lFile.lastModified();        lFileInfo.IsDir = lFile.isDirectory();        lFileInfo.filePath = filePath;        if (lFileInfo.IsDir) {            int lCount = 0;            File[] files = lFile.listFiles(filter);            // null means we cannot access this dir            if (files == null) {                return null;            }            for (File child : files) {                if ((!child.isHidden() || showHidden)                        && Util.isNormalFile(child.getAbsolutePath())) {                    lCount++;                }            }            lFileInfo.Count = lCount;        } else {            lFileInfo.fileSize = lFile.length();        }        return lFileInfo;    }    /*     * 采用APK标,之前是因为android中存在BUG,     * appInfo.publicSourceDir = apkPath;修正这个问题,详情参:     * http://code.google.com/p/android/issues/detail?id=9151     */    public static Drawable getApkIcon(Context context, String apkPath) {        PackageManager pm = context.getPackageManager();        PackageInfo info = pm.getPackageArchiveInfo(apkPath,                PackageManager.GET_ACTIVITIES);        if (info != null) {            ApplicationInfo appInfo = info.applicationInfo;            appInfo.sourceDir = apkPath;            appInfo.publicSourceDir = apkPath;            try {                return appInfo.loadIcon(pm);            } catch (OutOfMemoryError e) {                Log.e(LOG_TAG, e.toString());            }        }        return null;    }    //文件的    public static String getExtFromFilename(String filename) {        int dotPosition = filename.lastIndexOf('.');        if (dotPosition != -1) {            return filename.substring(dotPosition + 1, filename.length());        }        return "";    }    //得去掉文件的文件名比如C:/a/b/c.png”,输C:/a/b/c”    public static String getNameFromFilename(String filename) {        int dotPosition = filename.lastIndexOf('.');        if (dotPosition != -1) {            return filename.substring(0, dotPosition);        }        return "";    }    //文件路径,获路径    public static String getPathFromFilepath(String filepath) {        int pos = filepath.lastIndexOf('/');        if (pos != -1) {            return filepath.substring(0, pos);        }        return "";    }    //文件路径,获文件名(带缀,如果    public static String getNameFromFilepath(String filepath) {        int pos = filepath.lastIndexOf('/');        if (pos != -1) {            return filepath.substring(pos + 1);        }        return "";    }    // return new file path if successful, or return null    public static String copyFile(String src, String dest) {        File file = new File(src);        if (!file.exists() || file.isDirectory()) {            Log.v(LOG_TAG, "copyFile: file not exist or is directory, " + src);            return null;        }        FileInputStream fi = null;        FileOutputStream fo = null;        try {            fi = new FileInputStream(file);            File destPlace = new File(dest);            if (!destPlace.exists()) {                if (!destPlace.mkdirs())                    return null;            }            String destPath = Util.makePath(dest, file.getName());            File destFile = new File(destPath);            int i = 1;            while (destFile.exists()) {                String destName = Util.getNameFromFilename(file.getName()) + " " + i++ + "."                        + Util.getExtFromFilename(file.getName());                destPath = Util.makePath(dest, destName);                destFile = new File(destPath);            }            if (!destFile.createNewFile())                return null;            fo = new FileOutputStream(destFile);            int count = 102400;            byte[] buffer = new byte[count];            int read = 0;            while ((read = fi.read(buffer, 0, count)) != -1) {                fo.write(buffer, 0, read);            }            // TODO: set access privilege            return destPath;        } catch (FileNotFoundException e) {            Log.e(LOG_TAG, "copyFile: file not found, " + src);            e.printStackTrace();        } catch (IOException e) {            Log.e(LOG_TAG, "copyFile: " + e.toString());        } finally {            try {                if (fi != null)                    fi.close();                if (fo != null)                    fo.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return null;    }    // does not include sd card folder    private static String[] SysFileDirs = new String[] {        "miren_browser/imagecaches"    };    //判断一个文件是需要根据Setting的设置。特别说文件示。    public static boolean shouldShowFile(String path) {        return shouldShowFile(new File(path));    }    //判断一个文件是需要根据Setting的设置。特别说文件示。    public static boolean shouldShowFile(File file) {        boolean show = Settings.instance().getShowDotAndHiddenFiles();        if (show)            return true;        if (file.isHidden())            return false;        if (file.getName().startsWith("."))            return false;        String sdFolder = getSdDirectory();        for (String s : SysFileDirs) {            if (file.getPath().startsWith(makePath(sdFolder, s)))                return false;        }        return true;    }    //根据下文对Context,获默认的收藏集合    public static ArrayList<FavoriteItem> getDefaultFavorites(Context context) {        ArrayList<FavoriteItem> list = new ArrayList<FavoriteItem>();        list.add(new FavoriteItem(context.getString(R.string.favorite_photo), makePath(getSdDirectory(), "DCIM/Camera")));        list.add(new FavoriteItem(context.getString(R.string.favorite_sdcard), getSdDirectory()));        //list.add(new FavoriteItem(context.getString(R.string.favorite_root), getSdDirectory()));        list.add(new FavoriteItem(context.getString(R.string.favorite_screen_cap), makePath(getSdDirectory(), "MIUI/screen_cap")));        list.add(new FavoriteItem(context.getString(R.string.favorite_ringtone), makePath(getSdDirectory(), "MIUI/ringtone")));        return list;    }    //ViewTextView设置文    public static boolean setText(View view, int id, String text) {        TextView textView = (TextView) view.findViewById(id);        if (textView == null)            return false;        textView.setText(text);        return true;    }    //ViewTextView设置文    public static boolean setText(View view, int id, int text) {        TextView textView = (TextView) view.findViewById(id);        if (textView == null)            return false;        textView.setText(text);        return true;    }    // comma separated number    public static String convertNumber(long number) {        return String.format("%,d", number);    }    // storage, G M K B    public static String convertStorage(long size) {        long kb = 1024;        long mb = kb * 1024;        long gb = mb * 1024;        if (size >= gb) {            return String.format("%.1f GB", (float) size / gb);        } else if (size >= mb) {            float f = (float) size / mb;            return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);        } else if (size >= kb) {            float f = (float) size / kb;            return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);        } else            return String.format("%d B", size);    }    public static class SDCardInfo {        public long total;        public long free;    }    //SD的各种信息,总量大小和剩余量大小等    public static SDCardInfo getSDCardInfo() {        String sDcString = android.os.Environment.getExternalStorageState();        if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) {            File pathFile = android.os.Environment.getExternalStorageDirectory();            try {                android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());                // SDCardBLOCK                long nTotalBlocks = statfs.getBlockCount();                // SDCardblockSIZE                long nBlocSize = statfs.getBlockSize();                // 供程使用Block的数                long nAvailaBlock = statfs.getAvailableBlocks();                // 取剩下的Block的数(包括一般程使用)                long nFreeBlock = statfs.getFreeBlocks();                SDCardInfo info = new SDCardInfo();                // SDCard 量大小MB                info.total = nTotalBlocks * nBlocSize;                //  SDCard 剩余大小MB                info.free = nAvailaBlock * nBlocSize;                return info;            } catch (IllegalArgumentException e) {                Log.e(LOG_TAG, e.toString());            }        }        return null;    }    //示一通知    public static void showNotification(Context context, Intent intent, String title, String body, int drawableId) {        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);        Notification notification = new Notification(drawableId, body, System.currentTimeMillis());        notification.flags = Notification.FLAG_AUTO_CANCEL;        notification.defaults = Notification.DEFAULT_SOUND;        if (intent == null) {            // FIXEME: category tab is disabled            intent = new Intent(context, FileViewActivity.class);        }        PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);        manager.notify(drawableId, notification);    }    //化毫秒格式的时间    public static String formatDateString(Context context, long time) {        DateFormat dateFormat = android.text.format.DateFormat                .getDateFormat(context);        DateFormat timeFormat = android.text.format.DateFormat                .getTimeFormat(context);        Date date = new Date(time);        return dateFormat.format(date) + " " + timeFormat.format(date);    }    public static void updateActionModeTitle(ActionMode mode, Context context, int selectedNum) {        if (mode != null) {            mode.setTitle(context.getString(R.string.multi_select_title,selectedNum));            if(selectedNum == 0){                mode.finish();            }        }    }//sDocMimeTypesSet查詢條件是    public static HashSet<String> sDocMimeTypesSet = new HashSet<String>() {        {            add("text/plain");            add("text/plain");            add("application/pdf");            add("application/msword");            add("application/vnd.ms-excel");            add("application/vnd.ms-excel");        }    };//对于压缩文件Zip的查詢條件是    public static String sZipFileMimeType = "application/zip";    public static int CATEGORY_TAB_INDEX = 0;    public static int SDCARD_TAB_INDEX = 1;}


1 0
原创粉丝点击