summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java')
-rw-r--r--app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java604
1 files changed, 604 insertions, 0 deletions
diff --git a/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java b/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java
new file mode 100644
index 0000000..d995925
--- /dev/null
+++ b/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java
@@ -0,0 +1,604 @@
+package com.xc3fff0e.xmanager;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.LightingColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.media.ExifInterface;
+import android.net.Uri;
+import android.os.Environment;
+import android.provider.DocumentsContract;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+public class FileUtil {
+
+private static void createNewFile(String path) {
+int lastSep = path.lastIndexOf(File.separator);
+if (lastSep > 0) {
+String dirPath = path.substring(0, lastSep);
+makeDir(dirPath);
+}
+
+File file = new File(path);
+
+try {
+if (!file.exists())
+file.createNewFile();
+} catch (IOException e) {
+e.printStackTrace();
+}
+}
+
+public static String readFile(String path) {
+createNewFile(path);
+
+StringBuilder sb = new StringBuilder();
+FileReader fr = null;
+try {
+fr = new FileReader(new File(path));
+
+char[] buff = new char[1024];
+int length = 0;
+
+while ((length = fr.read(buff)) > 0) {
+sb.append(new String(buff, 0, length));
+}
+} catch (IOException e) {
+e.printStackTrace();
+} finally {
+if (fr != null) {
+try {
+fr.close();
+} catch (Exception e) {
+e.printStackTrace();
+}
+}
+}
+
+return sb.toString();
+}
+
+public static void writeFile(String path, String str) {
+createNewFile(path);
+FileWriter fileWriter = null;
+
+try {
+fileWriter = new FileWriter(new File(path), false);
+fileWriter.write(str);
+fileWriter.flush();
+} catch (IOException e) {
+e.printStackTrace();
+} finally {
+try {
+if (fileWriter != null)
+fileWriter.close();
+} catch (IOException e) {
+e.printStackTrace();
+}
+}
+}
+
+public static void copyFile(String sourcePath, String destPath) {
+if (!isExistFile(sourcePath)) return;
+createNewFile(destPath);
+
+FileInputStream fis = null;
+FileOutputStream fos = null;
+
+try {
+fis = new FileInputStream(sourcePath);
+fos = new FileOutputStream(destPath, false);
+
+byte[] buff = new byte[1024];
+int length = 0;
+
+while ((length = fis.read(buff)) > 0) {
+fos.write(buff, 0, length);
+}
+} catch (IOException e) {
+e.printStackTrace();
+} finally {
+if (fis != null) {
+try {
+fis.close();
+} catch (IOException e) {
+e.printStackTrace();
+}
+}
+if (fos != null) {
+try {
+fos.close();
+} catch (IOException e) {
+e.printStackTrace();
+}
+}
+}
+}
+
+public static void moveFile(String sourcePath, String destPath) {
+copyFile(sourcePath, destPath);
+deleteFile(sourcePath);
+}
+
+public static void deleteFile(String path) {
+File file = new File(path);
+
+if (!file.exists()) return;
+
+if (file.isFile()) {
+file.delete();
+return;
+}
+
+File[] fileArr = file.listFiles();
+
+if (fileArr != null) {
+for (File subFile : fileArr) {
+if (subFile.isDirectory()) {
+deleteFile(subFile.getAbsolutePath());
+}
+
+if (subFile.isFile()) {
+subFile.delete();
+}
+}
+}
+
+file.delete();
+}
+
+public static boolean isExistFile(String path) {
+File file = new File(path);
+return file.exists();
+}
+
+public static void makeDir(String path) {
+if (!isExistFile(path)) {
+File file = new File(path);
+file.mkdirs();
+}
+}
+
+public static void listDir(String path, ArrayList<String> list) {
+File dir = new File(path);
+if (!dir.exists() || dir.isFile()) return;
+
+File[] listFiles = dir.listFiles();
+if (listFiles == null || listFiles.length <= 0) return;
+
+if (list == null) return;
+list.clear();
+for (File file : listFiles) {
+list.add(file.getAbsolutePath());
+}
+}
+
+public static boolean isDirectory(String path) {
+if (!isExistFile(path)) return false;
+return new File(path).isDirectory();
+}
+
+public static boolean isFile(String path) {
+if (!isExistFile(path)) return false;
+return new File(path).isFile();
+}
+
+public static long getFileLength(String path) {
+if (!isExistFile(path)) return 0;
+return new File(path).length();
+}
+
+public static String getExternalStorageDir() {
+return Environment.getExternalStorageDirectory().getAbsolutePath();
+}
+
+public static String getPackageDataDir(Context context) {
+return context.getExternalFilesDir(null).getAbsolutePath();
+}
+
+public static String getPublicDir(String type) {
+return Environment.getExternalStoragePublicDirectory(type).getAbsolutePath();
+}
+
+public static String convertUriToFilePath(final Context context, final Uri uri) {
+String path = null;
+if (DocumentsContract.isDocumentUri(context, uri)) {
+if (isExternalStorageDocument(uri)) {
+final String docId = DocumentsContract.getDocumentId(uri);
+final String[] split = docId.split(":");
+final String type = split[0];
+
+if ("primary".equalsIgnoreCase(type)) {
+path = Environment.getExternalStorageDirectory() + "/" + split[1];
+}
+} else if (isDownloadsDocument(uri)) {
+final String id = DocumentsContract.getDocumentId(uri);
+
+if (!TextUtils.isEmpty(id)) {
+if (id.startsWith("raw:")) {
+return id.replaceFirst("raw:", "");
+}
+}
+
+final Uri contentUri = ContentUris
+.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
+
+path = getDataColumn(context, contentUri, null, null);
+} else if (isMediaDocument(uri)) {
+final String docId = DocumentsContract.getDocumentId(uri);
+final String[] split = docId.split(":");
+final 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;
+}
+
+final String selection = MediaStore.Audio.Media._ID + "=?";
+final String[] selectionArgs = new String[]{
+split[1]
+};
+
+path = getDataColumn(context, contentUri, selection, selectionArgs);
+}
+} else if (ContentResolver.SCHEME_CONTENT.equalsIgnoreCase(uri.getScheme())) {
+path = getDataColumn(context, uri, null, null);
+} else if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) {
+path = uri.getPath();
+}
+
+if (path != null) {
+try {
+return URLDecoder.decode(path, "UTF-8");
+}catch(Exception e){
+return null;
+}
+}
+return null;
+}
+
+private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
+Cursor cursor = null;
+
+final String column = MediaStore.Images.Media.DATA;
+final String[] projection = {
+column
+};
+
+try {
+cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
+if (cursor != null && cursor.moveToFirst()) {
+final int column_index = cursor.getColumnIndexOrThrow(column);
+return cursor.getString(column_index);
+}
+} catch (Exception e) {
+
+} finally {
+if (cursor != null) {
+cursor.close();
+}
+}
+return null;
+}
+
+
+private static boolean isExternalStorageDocument(Uri uri) {
+return "com.android.externalstorage.documents".equals(uri.getAuthority());
+}
+
+private static boolean isDownloadsDocument(Uri uri) {
+return "com.android.providers.downloads.documents".equals(uri.getAuthority());
+}
+
+private static boolean isMediaDocument(Uri uri) {
+return "com.android.providers.media.documents".equals(uri.getAuthority());
+}
+
+private static void saveBitmap(Bitmap bitmap, String destPath) {
+FileOutputStream out = null;
+FileUtil.createNewFile(destPath);
+try {
+out = new FileOutputStream(new File(destPath));
+bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+} catch (Exception e) {
+e.printStackTrace();
+} finally {
+try {
+if (out != null) {
+out.close();
+}
+} catch (IOException e) {
+e.printStackTrace();
+}
+}
+}
+
+public static Bitmap getScaledBitmap(String path, int max) {
+Bitmap src = BitmapFactory.decodeFile(path);
+
+int width = src.getWidth();
+int height = src.getHeight();
+float rate = 0.0f;
+
+if (width > height) {
+rate = max / (float) width;
+height = (int) (height * rate);
+width = max;
+} else {
+rate = max / (float) height;
+width = (int) (width * rate);
+height = max;
+}
+
+return Bitmap.createScaledBitmap(src, width, height, true);
+}
+
+public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
+final int width = options.outWidth;
+final int height = options.outHeight;
+int inSampleSize = 1;
+
+if (height > reqHeight || width > reqWidth) {
+final int halfHeight = height / 2;
+final int halfWidth = width / 2;
+
+while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {
+inSampleSize *= 2;
+}
+}
+
+return inSampleSize;
+}
+
+public static Bitmap decodeSampleBitmapFromPath(String path, int reqWidth, int reqHeight) {
+final BitmapFactory.Options options = new BitmapFactory.Options();
+options.inJustDecodeBounds = true;
+BitmapFactory.decodeFile(path, options);
+
+options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
+
+options.inJustDecodeBounds = false;
+return BitmapFactory.decodeFile(path, options);
+}
+
+public static void resizeBitmapFileRetainRatio(String fromPath, String destPath, int max) {
+if (!isExistFile(fromPath)) return;
+Bitmap bitmap = getScaledBitmap(fromPath, max);
+saveBitmap(bitmap, destPath);
+}
+
+public static void resizeBitmapFileToSquare(String fromPath, String destPath, int max) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Bitmap bitmap = Bitmap.createScaledBitmap(src, max, max, true);
+saveBitmap(bitmap, destPath);
+}
+
+public static void resizeBitmapFileToCircle(String fromPath, String destPath) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Bitmap bitmap = Bitmap.createBitmap(src.getWidth(),
+src.getHeight(), Bitmap.Config.ARGB_8888);
+Canvas canvas = new Canvas(bitmap);
+
+final int color = 0xff424242;
+final Paint paint = new Paint();
+final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
+
+paint.setAntiAlias(true);
+canvas.drawARGB(0, 0, 0, 0);
+paint.setColor(color);
+canvas.drawCircle(src.getWidth() / 2, src.getHeight() / 2,
+src.getWidth() / 2, paint);
+paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+canvas.drawBitmap(src, rect, rect, paint);
+
+saveBitmap(bitmap, destPath);
+}
+
+public static void resizeBitmapFileWithRoundedBorder(String fromPath, String destPath, int pixels) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src
+.getHeight(), Bitmap.Config.ARGB_8888);
+Canvas canvas = new Canvas(bitmap);
+
+final int color = 0xff424242;
+final Paint paint = new Paint();
+final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
+final RectF rectF = new RectF(rect);
+final float roundPx = pixels;
+
+paint.setAntiAlias(true);
+canvas.drawARGB(0, 0, 0, 0);
+paint.setColor(color);
+canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
+
+paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+canvas.drawBitmap(src, rect, rect, paint);
+
+saveBitmap(bitmap, destPath);
+}
+
+public static void cropBitmapFileFromCenter(String fromPath, String destPath, int w, int h) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+
+int width = src.getWidth();
+int height = src.getHeight();
+
+if (width < w && height < h)
+return;
+
+int x = 0;
+int y = 0;
+
+if (width > w)
+x = (width - w) / 2;
+
+if (height > h)
+y = (height - h) / 2;
+
+int cw = w;
+int ch = h;
+
+if (w > width)
+cw = width;
+
+if (h > height)
+ch = height;
+
+Bitmap bitmap = Bitmap.createBitmap(src, x, y, cw, ch);
+saveBitmap(bitmap, destPath);
+}
+
+public static void rotateBitmapFile(String fromPath, String destPath, float angle) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Matrix matrix = new Matrix();
+matrix.postRotate(angle);
+Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
+saveBitmap(bitmap, destPath);
+}
+
+public static void scaleBitmapFile(String fromPath, String destPath, float x, float y) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Matrix matrix = new Matrix();
+matrix.postScale(x, y);
+
+int w = src.getWidth();
+int h = src.getHeight();
+
+Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, w, h, matrix, true);
+saveBitmap(bitmap, destPath);
+}
+
+public static void skewBitmapFile(String fromPath, String destPath, float x, float y) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Matrix matrix = new Matrix();
+matrix.postSkew(x, y);
+
+int w = src.getWidth();
+int h = src.getHeight();
+
+Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, w, h, matrix, true);
+saveBitmap(bitmap, destPath);
+}
+
+public static void setBitmapFileColorFilter(String fromPath, String destPath, int color) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+Bitmap bitmap = Bitmap.createBitmap(src, 0, 0,
+src.getWidth() - 1, src.getHeight() - 1);
+Paint p = new Paint();
+ColorFilter filter = new LightingColorFilter(color, 1);
+p.setColorFilter(filter);
+Canvas canvas = new Canvas(bitmap);
+canvas.drawBitmap(bitmap, 0, 0, p);
+saveBitmap(bitmap, destPath);
+}
+
+public static void setBitmapFileBrightness(String fromPath, String destPath, float brightness) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+ColorMatrix cm = new ColorMatrix(new float[]
+{
+1, 0, 0, 0, brightness,
+0, 1, 0, 0, brightness,
+0, 0, 1, 0, brightness,
+0, 0, 0, 1, 0
+});
+
+Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
+Canvas canvas = new Canvas(bitmap);
+Paint paint = new Paint();
+paint.setColorFilter(new ColorMatrixColorFilter(cm));
+canvas.drawBitmap(src, 0, 0, paint);
+saveBitmap(bitmap, destPath);
+}
+
+public static void setBitmapFileContrast(String fromPath, String destPath, float contrast) {
+if (!isExistFile(fromPath)) return;
+Bitmap src = BitmapFactory.decodeFile(fromPath);
+ColorMatrix cm = new ColorMatrix(new float[]
+{
+contrast, 0, 0, 0, 0,
+0, contrast, 0, 0, 0,
+0, 0, contrast, 0, 0,
+0, 0, 0, 1, 0
+});
+
+Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
+Canvas canvas = new Canvas(bitmap);
+Paint paint = new Paint();
+paint.setColorFilter(new ColorMatrixColorFilter(cm));
+canvas.drawBitmap(src, 0, 0, paint);
+
+saveBitmap(bitmap, destPath);
+}
+
+public static int getJpegRotate(String filePath) {
+int rotate = 0;
+try {
+ExifInterface exif = new ExifInterface(filePath);
+int iOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
+
+switch (iOrientation) {
+case ExifInterface.ORIENTATION_ROTATE_90:
+rotate = 90;
+break;
+case ExifInterface.ORIENTATION_ROTATE_180:
+rotate = 180;
+break;
+case ExifInterface.ORIENTATION_ROTATE_270:
+rotate = 270;
+break;
+default:
+rotate = 0;
+break;
+}
+}
+catch (IOException e) {
+return 0;
+}
+
+return rotate;
+}
+public static File createNewPictureFile(Context context) {
+SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd_HHmmss");
+String fileName = date.format(new Date()) + ".jpg";
+File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath() + File.separator + fileName);
+return file;
+}
+} \ No newline at end of file