Android回顧--(十二) 資料儲存的幾種方式
ProgressDialog:
一個含有進度條以及訊息提示的彈窗
使用方式:
// 1、建立物件
ProgressDialog dialog = new ProgressDialog(context);
// 2、通過物件呼叫相應的方法來完成資訊的設定
dialog.setTitle("軟體更新");
dialog.setMessage("軟體正在更新,請勿關閉");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 3、設定事件的監聽
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
dialog.dismiss();
}
});
// 4、show
dialog.show()
資料的儲存
- sharePrefrence
- 本地的儲存(內部儲存/外部儲存)
- 資料庫的儲存
- ContentProvider的儲存
- 網路儲存
內部儲存
內部儲存實際上是手機中一塊特定的儲存區域,在這塊區域中主要存放的是手機中安裝程式和系統檔案。
內部儲存的訪問
- 檔案的建立
private void createFile() throws IOException{
File file = getFilesDir(); //通過方法獲取檔案類的物件
File file1 = new File(file,"hello.txt");
if (!file1.exists()){
file1.createNewFile();
}
}
- 向內部儲存寫入檔案內容
private void writeContentToFile(){
FileOutputStream out = null;
try {
File file = new File(getFilesDir(),"hello.txt");
out = new FileOutputStream(file);
out.write("yeah!this is JonyZ ".getBytes());
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3 . 讀取檔案裡面的內容
private void readFileContent(){
File file = new File(getFilesDir(),"hello.txt");
try {
FileInputStream in = new FileInputStream(file);
byte[] buf = new byte[(int) file.length()]; //這樣寫是一直檔案非常小的時候,直接使用檔案的長度。但是,一般在工作中,用於讀寫的檔案都非常的大,不能這樣寫。後續我會詳細的講解IO流
in.read(buf);
in.close();
String result = new String(buf);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
4、建立目錄
file.mkdirs():建立級聯目錄
file.mkdir():建立單個目錄
File file = getDir("jony",Context.MODE_PRIVATE); //第一個引數,表示當前應用下的根目錄建立目錄。第二個引數,私有模式。只有當前應用可以訪問
String path = getActivity().getFilesDir().getAbsolutePath()+"jony";
new File(path).mkdir();
5、刪除目錄或者檔案
public void deleteFileOrDir(File file){
if (file.isFile()){
file.delete();
}else if (file.isDirectory()){ //如果當前要刪除的檔案是目錄,需要先刪除裡面的,再刪除當前檔案
File[] files = file.listFiles();
if (files!=null){
for (int i = 0; i < files.length; i++) {
deleteFileOrDir(files[i]);
}
}
}
}
SharePrefences:輕量級儲存
-
用於何處:
- 放置使用者的登陸資訊
- 放置軟體的配置資訊
- 放置一些臨時資料
-
特點:
- 資料的儲存採用的是鍵值對的形式來進行儲存的
- 裡面的鍵是不能重複的
- 裡面的值是可以重複的 (map)
使用步驟:
- 新增資料到sp
- 獲取sp物件
SharePrefences sp = getSharePreferences("login",Context.MODE_PRIVATE);
第一個引數:表示sp裡面的xml檔案的名稱,不能新增xml
第二個引數:表示建立的檔案的訪問許可權,一般都是寫private表示只能夠自己訪問這個檔案,其他的應用不能訪問。 - 獲取Edit物件
Editor edit = sp.edit(); - 通過Edit物件的put方法來向裡面新增資料
edit.putBoolean("key1",true);
edit.putString("userName","jony");
edit.putInt("key2",0825); - 新增完資料之後,必須提交這個事物,不提交就沒有辦法將資料新增進去
edit.commit();
- 獲取sp物件
- 訪問sp,從sp中獲取資料
- 獲取sp物件
SharePrefences sp = getSharePreferences("login",Context.MODE_PRIVATE); - 通過sp的get方法獲取資料
sp.getString("userName",""); // 獲取資料
第一個引數:獲取資料的鍵
第二個引數:如果沒有通過鍵獲取到值,預設的值
boolean b = sp.getBoolean("key1",false);
String userName = sp.getString("userName","");
int key2 = sp.getInt("key2",-1);
- 獲取sp物件
- 清空sp
- 獲取sp物件
- 獲取Edit物件
- 通過edit.clear()或者edit.remove()來選擇刪除資料
- 提交這個事件的請求
SDcard檔案的相關操作
具體的我已經封裝好了一個幫助類,如下
import android.os.Environment;
import android.os.StatFs;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class SDUtils {
/**
* 檢測SdCard是否已經掛載
*
* @return
*/
public static boolean checkSdCardExitOrNot() {
String state = Environment.getExternalStorageState(); //獲取SdCard狀態
if (Environment.MEDIA_MOUNTED.equals(state)) { //掛載狀態,可讀可寫
return true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { //已掛載但只可讀
return false;
} else {
return false;
}
}
/**
* 獲取當前SdCard的剩餘空間大小
*
* @return
*/
public static int getFreeSpaceSize() {
//第一步:獲取SdCard的根目錄
File file = Environment.getExternalStorageDirectory();
//第二步:獲取StaFs-->這個類是專門用來獲取系統訊息的
StatFs fs = new StatFs(file.getAbsolutePath());
//第三步 獲取每一個塊的大小
int blockSize = fs.getBlockSize();//注意,這個方法在api 18的時候已經過時了,目前版本使用的是 fs.getBlockCountLong();
//獲取空閒塊的數量
int availableBlocks = fs.getAvailableBlocks();
return availableBlocks * blockSize / 1024 / 1024;
}
/**
* 判斷檔案是否存在
*
* @param path
* @return
*/
public static boolean checkFileExistOrNot(String path) {
File file = new File(path);
if (!file.exists()) {
return false;
}
return true;
}
/**
* 判斷檔案是否存在,不存在就建立
*
* @param path
*/
public static void createFile(String path) {
File file = new File(path);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 建立目錄
*
* @param path
*/
public static void createDir(String path) {
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
}
/**
* 刪除檔案
*
* @param file
*/
public static void deleteFile(File file) {
if (file.isFile()) { //如果是單檔案,那麼直接刪除
file.delete();
} else if (file.isDirectory()) { //當前檔案是目錄,先刪除下面的檔案,再刪除當前檔案
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
deleteFile(files[i]);
}
}
file.delete();
}
public static void copyFile(File fileSource, File fileDesternation) {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(fileSource);
out = new FileOutputStream(fileDesternation);
byte[] buf = new byte[1024];
int length;
while ((length = in.read(buf)) != -1) {
out.write(buf, 0, length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
相關文章
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- Python資料儲存方式有幾種?如何使用?Python
- Android的3種資料儲存技術(一)File儲存Android
- 使用快取(Cache)的幾種方式,回顧一下~~~快取
- 瀏覽器儲存資料的幾種方法瀏覽器
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- Python常用的資料儲存方式有哪些?五種!Python
- Kubernetes 幾種儲存方式效能對比 (轉載)
- Android中的資料儲存之檔案儲存Android
- 計算機硬體有兩種儲存資料的方式計算機
- Express 提交資料的幾種方式Express
- 33.Android資料儲存Android
- 遍歷資料夾的幾種方式
- Android中的資料儲存之SharedPreferencesAndroid
- python儲存檔案的幾種方法Python
- Android 截圖實現的幾種方式Android
- Android生成ViewModel例項的幾種方式AndroidView
- SpringBoot讀取配置資料的幾種方式Spring Boot
- 資料庫SQL調優的幾種方式資料庫SQL
- MySql資料庫備份的幾種方式MySql資料庫
- Flutter入門進階之旅(十二)Flutter 資料儲存Flutter
- Web3證明資料的儲存方式Web
- 《MySQL 基礎篇》十二:InnoDB 儲存引擎的資料結構MySql儲存引擎資料結構
- 詳解Android資料儲存技術Android
- 37.Android資料儲存再整理Android
- flask返回資料的幾種方式(字串,json,元祖)Flask字串JSON
- 從資料恢復角度分析iscsi、cifs、NFS三種儲存方式的區別資料恢復NFS
- 單細胞資料 儲存方式彙總
- Spark(16) -- 資料讀取與儲存的主要方式Spark
- 資料庫訪問幾種方式對比資料庫
- MogDB openGauss資料庫擴縮容的幾種方式資料庫
- MySQL 資料庫定時備份的幾種方式MySql資料庫
- (十二)本地儲存及同步
- 推動資料儲存方式變革的因素(附原資料表)
- 樹狀資料結構儲存方式—— CUD 篇資料結構
- 幾種非易失性儲存器的比較
- C/C++ 判斷計算機儲存器位元組序(端序)的幾種方式C++計算機
- 資料儲存--檔案儲存