文件相关工具类
来源:互联网 发布: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
- 文件相关工具类
- 文件相关工具类
- 文件相关工具类
- 文件相关操作工具类
- Android编码文件操作相关工具类
- android 总结文件相关工具类
- Android文件相关工具类代码总结
- java文件相关工具
- Hibernate相关配置文件、映射文件案例、工具类、总结相关
- 安卓常用工具类-FileUtils【文件相关的工具类】
- 图片相关操作的工具类 下载 ,缓存到文件
- Android文件File相关操作的一个工具类
- java-io-文件相关工具类(全)
- spring------------文件资源操作和 Web 相关工具类
- spring 文件资源操作和 Web 相关工具类
- Spring 相关工具类
- Web相关工具类
- 安全相关工具类
- springboot中webjars的打包与调用
- 7、字符串的输入与输出scanf、printf、cin、cout、gets、puts
- php 遍历文件夹及文件,获取文件名和文件路径存入数据库中
- Java基础学完了?来!复习(必看干货!)请认真看哦!
- apache 302重定向
- 文件相关工具类
- Django Rest Framework - 异常 、返回值处理 与 分页实现
- sys/cdefs.h: No such file or directory
- 多态
- 64-bit Tips
- 【Spring 核心】AOP 面向切面编程
- 浅析linux下的条件变量
- 深入剖析volatile关键字
- 算法原理 第四章