package triaina.commons.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import triaina.commons.exception.IORuntimeException; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; public final class FileUtils { private FileUtils() {} /** * Copy a file from source to destination * * @param srcPath the source * @param destPath the destination * @return the number of bytes that were transferred * @throws IOException */ public static long copyFile(File srcPath, File destPath) throws IOException { FileInputStream is = null; FileOutputStream os = null; try { is = new FileInputStream(srcPath); os = new FileOutputStream(destPath); return copyFileStream(is, os); } finally { CloseableUtils.close(is); CloseableUtils.close(os); } } /** * Transfer between streams * * @param is the input stream * @param os the output stream * @return the number of bytes that were transferred * @throws IOException */ public static long copyFileStream(FileInputStream is, FileOutputStream os) throws IOException { FileChannel srcChannel = null; FileChannel destChannel = null; try { srcChannel = is.getChannel(); destChannel = os.getChannel(); return srcChannel.transferTo(0, srcChannel.size(), destChannel); } finally { CloseableUtils.close(srcChannel); CloseableUtils.close(destChannel); } } public static String getName(String path) { return new File(path).getName(); } public static String getName(Uri uri) { return new File(uri.toString()).getName(); } public static boolean createNewFile(File file) { try { return file.createNewFile(); } catch (IOException exp) { throw new IORuntimeException(exp); } } /** * Retrieve real filename from Content Provider. * * @param contentUri Uri to be checked. * @return Full path filename of the resource pointed by contentUri if look up successfully finished. null otherwise. */ public static String getPathFromUri(ContentResolver resolver, Uri contentUri) { final String dataColumn = MediaStore.MediaColumns.DATA; Cursor cursor = null; try { cursor = resolver.query(contentUri, new String[] { dataColumn }, null, null, null); if (cursor == null || !cursor.moveToFirst()) return null; final int index = cursor.getColumnIndex(dataColumn); return cursor.getString(index); } finally { if (cursor != null) cursor.close(); } } }