文件相关工具类

来源:互联网 发布:excel数据分析方法五种 编辑:程序博客网 时间:2024/06/05 01:08
public class FileSizeUtil {    public static final int SIZETYPE_B = 1;// 获取文件大小单位为B的double值    public static final int SIZETYPE_KB = 2;// 获取文件大小单位为KB的double值    public static final int SIZETYPE_MB = 3;// 获取文件大小单位为MB的double值    public static final int SIZETYPE_GB = 4;// 获取文件大小单位为GB的double值    /**     * 获取文件指定文件的指定单位的大小     *     * @param filePath 文件路径     * @param sizeType 获取大小的类型1为B、2为KB、3为MB、4为GB     * @return double值的大小     */    public static double getFileOrFilesSize(String filePath, int sizeType) {        File file = new File(filePath);        long blockSize = 0;        try {            if (file.isDirectory()) {                blockSize = getFileSizes(file);            } else {                blockSize = getFileSize(file);            }        } catch (Exception e) {            e.printStackTrace();            Log.e("获取文件大小", "获取失败!" + e.getMessage());        }        return FormetFileSize(blockSize, sizeType);    }    /**     * 调用此方法自动计算指定文件或指定文件夹的大小     *     * @param filePath 文件路径     * @return 计算好的带B、KB、MB、GB的字符串     */    public static String getAutoFileOrFilesSize(String filePath) {        File file = new File(filePath);        long blockSize = 0;        try {            if (file.isDirectory()) {                blockSize = getFileSizes(file);            } else {                blockSize = getFileSize(file);            }        } catch (Exception e) {            e.printStackTrace();            Log.e("获取文件大小", "获取失败!");        }        return FormetFileSize(blockSize);    }    /**     * 获取指定文件大小     *     * @return     * @throws Exception     */    private static long getFileSize(File file) throws Exception {        long size = 0;        if (file.exists()) {            FileInputStream fis = null;            fis = new FileInputStream(file);            size = fis.available();        } else {            file.createNewFile();            Log.e("获取文件大小", "文件不存在!");        }        return size;    }    /**     * 获取指定文件夹     *     * @param f     * @return     * @throws Exception     */    private static long getFileSizes(File f) throws Exception {        long size = 0;        File flist[] = f.listFiles();        for (int i = 0; i < flist.length; i++) {            if (flist[i].isDirectory()) {                size = size + getFileSizes(flist[i]);            } else {                size = size + getFileSize(flist[i]);            }        }        return size;    }    /**     * 转换文件大小     *     * @param fileS     * @return     */    private static String FormetFileSize(long fileS) {        DecimalFormat df = new DecimalFormat("#.00");        String fileSizeString = "";        String wrongSize = "0B";        if (fileS == 0) {            return wrongSize;        }        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) + "GB";        }        return fileSizeString;    }    /**     * 转换文件大小,指定转换的类型     *     * @param fileS     * @param sizeType     * @return     */    private static double FormetFileSize(long fileS, int sizeType) {        DecimalFormat df = new DecimalFormat("#.00");        double fileSizeLong = 0;        switch (sizeType) {            case SIZETYPE_B:                fileSizeLong = Double.valueOf(df.format((double) fileS));                break;            case SIZETYPE_KB:                fileSizeLong = Double.valueOf(df.format((double) fileS / 1024));                break;            case SIZETYPE_MB:                fileSizeLong = Double.valueOf(df.format((double) fileS / 1048576));                break;            case SIZETYPE_GB:                fileSizeLong = Double.valueOf(df                        .format((double) fileS / 1073741824));                break;            default:                break;        }        return fileSizeLong;    }    /**     * 获取本应用的缓存数据     *     * @return     */    public static String getTheAppCacheSize(Context context) {        double filesSize = 0.00;        if (context.getFilesDir().exists()) {            filesSize = getFileOrFilesSize(context.getFilesDir()                    .getAbsolutePath(), 3);        }        // if (context.getCacheDir().exists()) {        // filesSize += getFileOrFilesSize(context.getCacheDir()        // .getAbsolutePath(), 3);        // }        //        // if (new File("/data/data/" + context.getPackageName() + "/databases")        // .exists()) {        // filesSize += getFileOrFilesSize(        // new File("/data/data/" + context.getPackageName()        // + "/databases").getAbsolutePath(), 3);        // }        //        if (Environment.getExternalStorageState().equals(                Environment.MEDIA_MOUNTED)) {            filesSize += getFileOrFilesSize(                    new File("/data/data/" + context.getPackageName()                            + "/databases").getAbsolutePath(), 3);        }        String filesSizeStr = filesSize + "";        if (filesSizeStr.length() >= 4) {            filesSizeStr = filesSizeStr.substring(0, 4);        }        return filesSizeStr + "MB";    }    @TargetApi(19)    public static String getImageAbsolutePath(Context context, Uri imageUri) {        if (context == null || imageUri == null)            return null;        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT                && DocumentsContract.isDocumentUri(context, imageUri)) {            if (isExternalStorageDocument(imageUri)) {                String docId = DocumentsContract.getDocumentId(imageUri);                String[] split = docId.split(":");                String type = split[0];                if ("primary".equalsIgnoreCase(type)) {                    return Environment.getExternalStorageDirectory() + "/"                            + split[1];                }            } else if (isDownloadsDocument(imageUri)) {                String id = DocumentsContract.getDocumentId(imageUri);                Uri contentUri = ContentUris.withAppendedId(                        Uri.parse("content://downloads/public_downloads"),                        Long.valueOf(id));                return getDataColumn(context, contentUri, null, null);            } else if (isMediaDocument(imageUri)) {                String docId = DocumentsContract.getDocumentId(imageUri);                String[] split = docId.split(":");                String type = split[0];                Uri contentUri = null;                if ("image".equals(type)) {                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;                } else if ("video".equals(type)) {                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;                } else if ("audio".equals(type)) {                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;                }                String selection = MediaStore.Images.Media._ID + "=?";                String[] selectionArgs = new String[]{split[1]};                return getDataColumn(context, contentUri, selection,                        selectionArgs);            }        } // MediaStore (and general)        else if ("content".equalsIgnoreCase(imageUri.getScheme())) {            // Return the remote address            if (isGooglePhotosUri(imageUri))                return imageUri.getLastPathSegment();            return getDataColumn(context, imageUri, null, null);        }        // File        else if ("file".equalsIgnoreCase(imageUri.getScheme())) {            return imageUri.getPath();        }        return null;    }    public static String getDataColumn(Context context, Uri uri,                                       String selection, String[] selectionArgs) {        Cursor cursor = null;        String column = MediaStore.Images.Media.DATA;        String[] projection = {column};        try {            cursor = context.getContentResolver().query(uri, projection,                    selection, selectionArgs, null);            if (cursor != null && cursor.moveToFirst()) {                int index = cursor.getColumnIndexOrThrow(column);                return cursor.getString(index);            }        } finally {            if (cursor != null)                cursor.close();        }        return null;    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is ExternalStorageProvider.     */    public static boolean isExternalStorageDocument(Uri uri) {        return "com.android.externalstorage.documents".equals(uri                .getAuthority());    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is DownloadsProvider.     */    public static boolean isDownloadsDocument(Uri uri) {        return "com.android.providers.downloads.documents".equals(uri                .getAuthority());    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is MediaProvider.     */    public static boolean isMediaDocument(Uri uri) {        return "com.android.providers.media.documents".equals(uri                .getAuthority());    }    /**     * @param uri The Uri to check.     * @return Whether the Uri authority is Google Photos.     */    public static boolean isGooglePhotosUri(Uri uri) {        return "com.google.android.apps.photos.content".equals(uri                .getAuthority());    }    public static String substring(String str, int start) {        if (str == null) {            return null;        } else {            if (start < 0) {                start += str.length();            }            if (start < 0) {                start = 0;            }            return start > str.length() ? "" : str.substring(start);        }    }    public static boolean isNumeric(String str) {        Pattern pattern = Pattern.compile("[0-9]*");        return pattern.matcher(str).matches();    }    public static byte[] toPrimitive(Byte[] array) {        if (array == null) {            return null;        } else if (array.length == 0) {            return new byte[0];        } else {            byte[] result = new byte[array.length];            for (int i = 0; i < array.length; ++i) {                result[i] = array[i].byteValue();            }            return result;        }    }    public static boolean containsWhitespace(CharSequence seq) {        if (TextUtils.isEmpty(seq)) {            return false;        } else {            int strLen = seq.length();            for (int i = 0; i < strLen; ++i) {                if (Character.isWhitespace(seq.charAt(i))) {                    return true;                }            }            return false;        }    }    private static DecimalFormat df = new DecimalFormat("0.00");    public static String getNumberFormat(Number f) {        if (f == null) {            return null;        }        return df.format(f);    }    /**     * 得到指定路径图片的options,不加载内存     * @param srcPath 源图片路径     * @return Options {@link BitmapFactory.Options}     */    public static BitmapFactory.Options getBitmapOptions(String srcPath) {        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(srcPath, options);        return options;    }    /**     * 压缩指定路径图片,并将其保存在缓存目录中;<br>     *      通过isDelSrc判定是否删除源文件,并获取到缓存后的图片路径;<br>     *      图片过大可能OOM     * @param context     * @param srcPath     * @param rqsW     * @param rqsH     * @param isDelSrc     * @return     */    public static String compressBitmap(Context context, String srcPath,                                        Bitmap.CompressFormat format,                                        int rqsW, int rqsH, boolean isDelSrc) {        Bitmap bitmap = compressBitmap(srcPath, rqsW, rqsH);        File srcFile = new File(srcPath);        String desPath = getImageCacheDir(context) + srcFile.getName();        clearCropFile(desPath);        int degree = getDegrees(srcPath);        try {            if (degree != 0) bitmap = rotateBitmap(bitmap, degree);            File file = new File(desPath);            FileOutputStream fos = new FileOutputStream(file);            bitmap.compress(format, 70, fos);            fos.close();            if (isDelSrc) srcFile.deleteOnExit();        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();        }        return desPath;    }    /**     * 压缩指定路径的图片,并得到图片对象     * @param path bitmap source path     * @return Bitmap {@link Bitmap}     */    public static Bitmap compressBitmap(String path, int rqsW, int rqsH) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(path, options);        options.inSampleSize = calculateInSampleSize(options, rqsW, rqsH);        options.inPreferredConfig = Bitmap.Config.RGB_565;        options.inJustDecodeBounds = false;        return BitmapFactory.decodeFile(path, options);    }    /**     * 压缩资源图片,并返回图片对象     * @param res {@link Resources}     * @param resID     * @param reqsW     * @param reqsH     * @return     */    public static Bitmap compressBitmap(Resources res, int resID, int reqsW, int reqsH) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeResource(res, resID, options);        options.inSampleSize = calculateInSampleSize(options, reqsW, reqsH);        options.inJustDecodeBounds = false;        return BitmapFactory.decodeResource(res, resID, options);    }    /**     * 基于质量的压缩算法, 此方法未 解决压缩后图像失真问题     * <br> 可先调用比例压缩适当压缩图片后,再调用此方法可解决上述问题     * <br> 压缩格式为JPEG     * @param bitmap     * @param maxBytes 压缩后的图像最大大小 单位为byte     * @return     */    public static Bitmap compressBitmap(Bitmap bitmap, long maxBytes) {        try {            ByteArrayOutputStream baos = new ByteArrayOutputStream();            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);            int options = 90;            while (baos.toByteArray().length > maxBytes) {                baos.reset();                bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);                options -= 10;            }            byte[] bts = baos.toByteArray();            Bitmap bmp = BitmapFactory.decodeByteArray(bts, 0, bts.length);            baos.close();            return bmp;        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();            return null;        }    }    /**     * calculate the bitmap sampleSize     * @param options     * @return     */    public static int calculateInSampleSize(BitmapFactory.Options options, int rqsW, int rqsH) {        final int height = options.outHeight;        final int width = options.outWidth;        int inSampleSize = 1;        if (rqsW == 0 || rqsH == 0) return 1;        if (height > rqsH || width > rqsW) {            final int heightRatio = Math.round((float) height/ (float) rqsH);            final int widthRatio = Math.round((float) width / (float) rqsW);            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;        }        return inSampleSize;    }    /**     * 获取图片缓存路径     * @param context     * @return     */    private static String getImageCacheDir(Context context) {        String dir = context.getCacheDir() + "Image" + File.separator;        File file = new File(dir);        if (!file.exists()) file.mkdirs();        return dir;    }    /**     * get the orientation of the bitmap {@link ExifInterface}     * @param path 图片路径     * @return     */    public static int getDegrees(String path) {        int degree = 0;        try {            ExifInterface exifInterface = new ExifInterface(path);            int orientation = exifInterface.getAttributeInt(                    ExifInterface.TAG_ORIENTATION,                    ExifInterface.ORIENTATION_NORMAL);            switch (orientation) {                case ExifInterface.ORIENTATION_ROTATE_90:                    degree = 90;                    break;                case ExifInterface.ORIENTATION_ROTATE_180:                    degree = 180;                    break;                case ExifInterface.ORIENTATION_ROTATE_270:                    degree = 270;                    break;            }        } catch (IOException e) {            e.printStackTrace();        }        return degree;    }    /**     * rotate the bitmap     * @param bitmap     * @param degrees     * @return     */    public static Bitmap rotateBitmap(Bitmap bitmap, int degrees) {        if (bitmap != null) {            Matrix m = new Matrix();            m.postRotate(degrees);            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);            return bitmap;        }        return null;    }    public static boolean saveBitmap(Bitmap bitmap, String path,                                     Bitmap.CompressFormat format, int quality) {        try {            File file = new File(path);            Log.i("tag", "压缩后:" + file.length());            File parent = file.getParentFile();            if (!parent.exists()) {                parent.mkdirs();            }            FileOutputStream fos = new FileOutputStream(file);            boolean b = bitmap.compress(format, quality, fos);            fos.flush();            fos.close();            return b;        } catch (Exception e) {            e.printStackTrace();        }        return false;    }    /**     * 删除文件     *     * @param uri 文件Uri     * @return 成功与否     */    public static boolean clearCropFile(Uri uri) {        if (uri == null) {            return false;        }        return clearCropFile(uri.getPath());    }    /**     * 删除文件     *     * @param path 文件路径     * @return 成功与否     */    public static boolean clearCropFile(String path) {        if (TextUtils.isEmpty(path)) {            return false;        }        //有时文件明明存在  但 file.exists为false        File file = new File(path);        //System.out.println("工具判断:"+FileUtils.exists(file)+" 原始判断:"+file.exists()+" \npath:"+file.getPath());        if (file.exists()) {            boolean result = file.delete();            if (result) {                System.out.println("Cached crop file cleared.");            } else {                System.out.println("Failed to clear cached crop file.");            }            return result;        } else {            System.out.println("Trying to clear cached crop file but it does not exist.");        }        return false;    }}

0 0
原创粉丝点击