一、基礎概要
1、說明:
1>應用程序運行用到的數據文件可以保存到sd卡中
2>文件類型:任意
3>數據保存路徑:
路徑1:/storage/sdcard/Android/data/packageName/files 其它應用可以訪問,應用卸載時刪除
路徑2:/storage/sdcard/xxx/ (表示自己創建的文件--xxx) 其它應用可以訪問,應用卸載時不會被刪除
2、相關API
Environment 操作sd卡工具類:
---得到sd卡狀態:Environment.getExternalStorageState()
sd卡可讀寫的掛載狀態值:Environment.MEDIA_MOUNTED
---得到sd卡路徑:Environment.getExternalStorageDirectory()
context.getExternalFilesDir():
---得到 /mnt/sdcard/Android/data/package_name/files/xxx.txt
操作sd卡的權限:
---android.permission.WRITE_EXTERNAL_STORAGE 屬於寫的權限,但加上后也可讀。
二、開發步驟(路徑1)
1、寫數據
1>判斷sd卡狀態,如果是掛載的狀態繼續
2>獲取輸入文件名/內容
3>得到指定文件的OutputStream:
.得到sd卡下的files路徑
.組成完整路徑
.創建FileOutputStream
4>寫數據
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String fileName="xrk";
String fileContent="我不是向日葵";
String filesPath=getExternalFilesDir(null).getAbsolutePath();
String filePath=filesPath+"/"+fileName;
FileOutputStream fos=new FileOutputStream(filePath);
fos.write(fileContent.getBytes("utf-8"));
fos.close();
Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "保存是啊比", Toast.LENGTH_SHORT).show();
}
2、讀數據:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String fileName="xrk";
String filesPath=getExternalFilesDir(null).getAbsolutePath();
System.out.println("iueiudshcs"+filesPath);
String filePath=filesPath+"/"+fileName;
FileInputStream fis=new FileInputStream(filePath);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while((len=fis.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
String content=baos.toString();
Toast.makeText(MainActivity.this, "讀取成功"+content, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "讀取失敗", Toast.LENGTH_SHORT).show();
}
三、開發步驟(路徑2)
1、寫數據
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String fileName="謝榮康.txt";
String fileContent="我不是向日葵";
//得到指定文件的輸出流
String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
File file=new File(sdPath+"/atguigu");
if (!file.exists()) {
file.mkdirs();//創建文件夾
}
String filePath=sdPath+"/atguigu/"+fileName;
String filesPath=getExternalFilesDir(null).getAbsolutePath();
System.out.println("iueiudshcs"+filesPath);
FileOutputStream fos=new FileOutputStream(filePath);
fos.write(fileContent.getBytes("utf-8"));
fos.close();
Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "保存是啊比", Toast.LENGTH_SHORT).show();
}
2、讀數據:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String fileName="謝榮康.txt";
String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
String filePath=sdPath+"/atguigu/"+fileName;
FileInputStream fis=new FileInputStream(filePath);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while((len=fis.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
String content=baos.toString();
fis.close();
Toast.makeText(MainActivity.this, "讀取成功"+content, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "讀取失敗", Toast.LENGTH_SHORT).show();
}