編輯:關於Android編程
MTK中看到的一個文件操作的工具類貼出來大家使用節省時間。
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import com.android.videoeditor.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; import android.media.videoeditor.MediaProperties; import android.os.Environment; import android.util.Log; /** * File utilities */ public class FileUtils { // Logging private static final String TAG = "FileUtils"; /** * It is not possible to instantiate this class */ private FileUtils() { } /** * Gets the root path for all projects * * @param context The context * * @return The file representing the projects root directory, {@code null} if the external * storage is not currnetly mounted */ public static File getProjectsRootDir(Context context) throws FileNotFoundException, IOException { final File dir = MtkUtils.getExternalFilesDir(context);//context.getExternalFilesDir(null); if (dir != null && !dir.exists()) { if (!dir.mkdirs()) { throw new FileNotFoundException("Cannot create folder: " + dir.getAbsolutePath()); } else { // Create the file which hides the media files if (!new File(dir, ".nomedia").createNewFile()) { throw new FileNotFoundException("Cannot create file .nomedia"); } } } return dir; } /** * Get the filename for the specified raw resource id. Create the file if * the file does not exist. * * @param context The context * @param maskRawResourceId The mask raw resource id * * @return The mask filename */ public static String getMaskFilename(Context context, int maskRawResourceId) throws FileNotFoundException, IOException { final String filename; switch (maskRawResourceId) { case R.raw.mask_contour: { filename = "mask_countour.jpg"; break; } case R.raw.mask_diagonal: { filename = "mask_diagonal.jpg"; break; } default: { throw new IllegalArgumentException("Invalid mask raw resource id"); } } final File mf = new File(context.getFilesDir(), filename); if (!mf.exists()) { Bitmap bitmap = null; FileOutputStream fos = null; InputStream is = null; try { is = context.getResources().openRawResource(maskRawResourceId); bitmap = BitmapFactory.decodeStream(is); if (bitmap == null) { throw new IllegalStateException("Cannot decode raw resource mask"); } fos = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); if (!bitmap.compress(CompressFormat.JPEG, 100, fos)) { throw new IllegalStateException("Cannot compress bitmap"); } } finally { if (is != null) { is.close(); } if (bitmap != null) { bitmap.recycle(); } if (fos != null) { fos.flush(); fos.close(); } } } return mf.getAbsolutePath(); } /** * Get the raw id for the mask file * * @param path The full file name * * @return The raw id */ public static int getMaskRawId(String path) { final String filename = new File(path).getName(); if (filename.equals("mask_countour.jpg")) { return R.raw.mask_contour; } else if (filename.equals("mask_diagonal.jpg")) { return R.raw.mask_diagonal; } else { throw new IllegalArgumentException("Unknown file: " + path); } } /** * Get the filename for the specified raw resource id. Create the file if * the file does not exist * * @param context The context * @param rawResourceId The raw resource id * * @return The audio track filename */ public static String getAudioTrackFilename(Context context, int rawResourceId) throws FileNotFoundException, IOException { final String filename; switch (rawResourceId) { case R.raw.theme_travel_audio_track: { filename = "theme_travel.m4a"; break; } case R.raw.theme_surfing_audio_track: { filename = "theme_surfing.m4a"; break; } case R.raw.theme_film_audio_track: { filename = "theme_film.m4a"; break; } case R.raw.theme_rockandroll_audio_track: { filename = "theme_rockandroll.m4a"; break; } default: { throw new IllegalArgumentException("Invalid audio track raw resource id"); } } final File mf = new File(context.getFilesDir(), filename); if (!mf.exists()) { FileOutputStream fos = null; InputStream is = null; try { is = context.getResources().openRawResource(rawResourceId); fos = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); final byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = is.read(buffer)) > 0) { fos.write(buffer, 0, bytesRead); } } finally { if (is != null) { is.close(); } if (fos != null) { fos.flush(); fos.close(); } } } return mf.getAbsolutePath(); } /** * Create a new project directory * * @return The absolute path to the project */ public static String createNewProjectPath(Context context) throws FileNotFoundException, IOException { final File file = new File(getProjectsRootDir(context), StringUtils.randomString(10)); if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "New project: " + file.getAbsolutePath()); } return file.getAbsolutePath(); } /** * Get a unique video filename. * * @param fileType The file type * * @return The filename */ public static String createMovieName(int fileType) { final String filename; switch (fileType) { case MediaProperties.FILE_MP4: { filename = "movie_" + StringUtils.randomStringOfNumbers(6) + ".mp4"; break; } case MediaProperties.FILE_3GP: { filename = "movie_" + StringUtils.randomStringOfNumbers(6) + ".3gp"; break; } default: { throw new IllegalArgumentException("Unsupported file type: " + fileType); } } /// M: support switching sdcard for exporting movie @{ // final File moviesDirectory = Environment.getExternalStoragePublicDirectory( // Environment.DIRECTORY_MOVIES); final File moviesDirectory = new File(MtkUtils.getMovieExportPath()); /// @} // Make this directory if it does not exist if (!moviesDirectory.exists()) { moviesDirectory.mkdirs(); } final File f = new File(moviesDirectory, filename); return f.getAbsolutePath(); } /** * Delete all the files in the specified folder and the folder itself. * * @param dir The project path */ public static boolean deleteDir(File dir) { if (dir.isDirectory()) { final String[] children = dir.list(); for (int i = 0; i < children.length; i++) { final File f = new File(dir, children[i]); if (!deleteDir(f)) { Log.e(TAG, "File cannot be deleted: " + f.getAbsolutePath()); return false; } } } // The directory is now empty so delete it return dir.delete(); } /** * Get the name of the file * * @param filename The full path filename * @return The name of the file */ public static String getSimpleName(String filename) { final int index = filename.lastIndexOf('/'); if (index == -1) { return filename; } else { return filename.substring(index + 1); } } }
一、源代碼源代碼及demo二、背景先看看Win10的加載動畫(找了很久才找到):每次打開電腦都會有這個加載動畫,看上挺cool的,就想著自己能否實現它。要實現這個動畫?首
前言 這段時間在Testerhome上看了一些有關性能測試的帖子,看別人的東西,始終是別人的,只有自己寫一遍才能體會其中的細節,雖然說不要重復造輪子,但是這種基礎的東西
先給大家展示下效果圖,如果大家感覺還不錯,請參考實現代碼很簡單的一個例子,點擊刷新驗證碼,刷新當前顯示的驗證碼,點擊確定,如果輸入的和顯示的匹配,就會跳轉到下一個界面中,
小米4S手機用什麼SIM卡?小米4S已經發布了,那麼有想購買意願的用戶也想知道小米4S用的是什麼電話卡,還有需不需要剪卡之類的,這裡小編來給大家介紹一下小米