android的五種存儲方式分別是:
1,SharedPreferences
2,file
3,sqlite
4,contentproviter
5,http
File
權限
File文件的模式
Activity.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,隻能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容。
Activity.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Activity.MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;
Activity.MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
Environment(訪問環境的變量)
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);//判斷sd卡是否可用 Environment.getExternalStorageDirectory();//sd卡根目錄的絕對路徑 Environment.getDataDirectory().getAbsolutePath();//獲取內部存儲的絕對路徑
StatFs(文件系統空間檢索)
StatFs stat = new StatFs(filePath);//獲取一個statfs對象 stat.getBlockSizeLong();//獲取單個數據塊的長度(byte),api 18以前使用stat.getBlockSize(); stat.getBlockCountLong();//獲取數據塊的數量,api 18以前使用stat.getBlockCount(); stat.getAvailableBlocksLong();//獲取可用數據塊的數量,api 18以前使用stat.getAvailableBlocks(); Formatter.formatFileSize(context, 1*1024);//將當前值格式化成文件大小形式的字符串
File(操作文件)
File file = new File(path);//獲得file的對象 file.isDirectory();//是否是文件夾 file.isFile();是否是文件 file.exists();//文件是否存在 file.createNewFile();//創建一個新文件 file.delete();//刪除一個文件 file.listFiles();//如果當前file對象是文件夾,則可以獲得文件夾內包含的所有文件,File[] file.length();//文件長度,byte file.renameTo();//文件重命名 file.mkdir();//創建一個空的文件夾
FileOutputStream與FileInputStream 文件IO流
/** * 將內容寫入文件 * * @author */ private void saveFile(Context context, String filePath, String content) { try { FileOutputStream outputStream = context.openFileOutput(filePath, Activity.MODE_PRIVATE); outputStream.write(content.getBytes()); outputStream.flush(); outputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
/** * 讀取文件內容 * * @param filePath * @return */ public String readSDFile(String filePath) { String res = ""; try { File file = new File(filePath); if (!file.exists()) return null; InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "UTF-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String lineStr; while ((lineStr = bufferedReader.readLine()) != null) { res += lineStr; } inputStreamReader.close(); } catch (Exception e) { e.printStackTrace(); } return res; }
操作File的常用方法
/** * 查看文件大小,遞歸 * * @param file * @return */ public static long getFileSize(File file) { long size = 0; if (file.isDirectory()) { File files[] = file.listFiles(); for (int i = 0; i < files.length; i++) { size = size + getFileSize(files[i]); } } else { size = size + file.length(); } return size; }
/** * 刪除某個文件夾,遞歸 * * @param filePath */ public static void deleteFile(String filePath) { File file = new File(filePath); if (file.exists() && file.isFile()) {//如果文件存在,並且是文件夾 file.delete(); } else if (file.exists() && file.isDirectory()) {//如果文件是文件夾 File[] childFiles = file.listFiles(); if (childFiles == null || childFiles.length == 0) return; for (int i = 0; i < childFiles.length; i++) { deleteFile(childFiles[i].getPath()); } } }
/** * 文件重命名 * * @param path 文件目錄 * @param oldname 原來的文件名 * @param newname 新文件名 */ public static void renameFile(String path, String oldname, String newname) { if (!oldname.equals(newname)) {//新的文件名和以前文件名不同時,才有必要進行重命名 File oldfile = new File(path + "/" + oldname); if (!oldfile.exists()) { return;//文件不存在 } File newfile = new File(path + "/" + newname); if (newfile.exists()) {//若在該目錄下已經有一個文件和新文件名相同,則重命名成(2) //已經存在! newfile = new File(path + "/" + newname + "(2)"); oldfile.renameTo(newfile); } else { oldfile.renameTo(newfile); } } }
/** * 獲得SD卡總大小 */ public static String getSDAllSize(Context context) { File path = getSDFile(); StatFs stat = new StatFs(path.getPath()); long blockSize = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { blockSize = stat.getBlockSizeLong(); } else { blockSize = stat.getBlockSize(); } long totalBlocks = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { totalBlocks = stat.getBlockCountLong(); } else { totalBlocks = stat.getBlockCount(); } return Formatter.formatFileSize(context, blockSize * totalBlocks); }
/** * 獲得sd卡剩餘容量,即可用大小 */ public String getSDRemainingSize(Context con) { File path = getSDFile(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long availableBlocks = stat.getAvailableBlocks(); return Formatter.formatFileSize(con, blockSize * availableBlocks); }