package org.wikipedia.util; import android.graphics.Bitmap; import android.os.Build; import android.os.StatFs; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public final class FileUtil { public static final int JPEG_QUALITY = 85; public static long physicalToLogicalSize(long physical, long blockSize) { if (physical == 0) { return 0; } long minBlockSize = Math.max(1, blockSize); return (physical / minBlockSize + Math.min(physical % minBlockSize, 1)) * minBlockSize; } public static long blockSize(File file) { StatFs statFs = new StatFs(file.getAbsolutePath()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { return statFs.getBlockSizeLong(); } //noinspection deprecation return statFs.getBlockSize(); } public static File writeToFile(ByteArrayOutputStream bytes, File destinationFile) throws IOException { FileOutputStream fo = new FileOutputStream(destinationFile); try { fo.write(bytes.toByteArray()); } finally { fo.flush(); fo.close(); } return destinationFile; } public static ByteArrayOutputStream compressBmpToJpg(Bitmap bitmap) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, JPEG_QUALITY, bytes); return bytes; } /** * Reads the contents of a file, preserving line breaks. * @return contents of the given file as a String. * @throws IOException */ public static String readFile(final InputStream inputStream) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); try { StringBuilder stringBuilder = new StringBuilder(); String readStr; while ((readStr = reader.readLine()) != null) { stringBuilder.append(readStr).append('\n'); } return stringBuilder.toString(); } finally { reader.close(); } } public static void clearDirectory(File dir) { if (dir.isDirectory()) { for (String file : dir.list()) { new File(dir, file).delete(); } } } public static String sanitizeFileName(String fileName) { return fileName.replaceAll("[:\\\\/*\"?|<>']", "_"); } public static boolean isVideo(String mimeType) { return mimeType.contains("ogg") || mimeType.contains("video"); } public static boolean isAudio(String mimeType) { return mimeType.contains("audio"); } public static boolean isImage(String mimeType) { return mimeType.contains("image"); } private FileUtil() { } }