特點:1,外部存儲不一定有效
2,數據是全局可讀的 能被其他程序讀和寫
3,當刪除當前應用程序時,內部私有數據會被刪除
public 不會被刪除掉
Java代碼
MainActivity
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void MyOnclick(View v){
switch (v.getId()) {
case R.id.btn6:
long l = SdCardUtils.getLength();
Log.i("==SSS==", l+"");
break;
case R.id.btn7:
long l2 = SdCardUtils.getFreeLength();
Log.i("==SSS=2222=", l2+"");
break;
case R.id.btn8:
boolean b = SdCardUtils.isDelete("info.txt");
if(b){
Log.i("AAAA", "刪除成功");
}else{
Log.i("AAAA", "刪除失敗");
}
break;
default:
break;
}
}
public void OnclickBtn(View v) {
switch (v.getId()) {
case R.id.btn1:// 測試外部存儲是否可用
boolean isAble = SdCardUtils.isExtraStorage();
if (isAble) {
Log.i("==AAA==", "外部存儲可用");
} else {
Log.i("==AAA==", "外部存儲不可用");
}
break;
case R.id.btn2:
boolean isWrite = SdCardUtils.WriteStoragePublic("aaaaaaaaaaaaa",
"info.txt");
if (isWrite) {
Log.i("==AAA==", "寫入外部存儲");
} else {
Log.i("==AAA==", "沒有寫入外部存儲");
}
break;
case R.id.btn3:
String str = SdCardUtils.readStoragePublic("info.txt");
Log.i("==AAA=str=", str);
break;
case R.id.btn4:
boolean isWrite1 = SdCardUtils.WriteStoragePrivate(MainActivity.this, "ssssss", "text.txt");
if (isWrite1) {
Log.i("==AAA==", "寫入外部存儲");
} else {
Log.i("==AAA==", "沒有寫入外部存儲");
}
break;
case R.id.btn5:
String str1 = SdCardUtils.readStoragePrivate(MainActivity.this, "text.txt");
Log.i("==AAA=str1=", str1);
break;
default:
break;
}
}
}
SdCardUtils
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.content.Context;
import android.os.Environment;
public class SdCardUtils {
public static boolean isExtraStorage() {
/**
* 獲取外部存儲狀態 外部可讀性狀態比較 相等爲true 不相等 false
*/
Boolean bl = false;
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
bl = true;
}
return bl;
}
/**
* 寫入數據到public 外部存儲
*
* @param contents
* @param fileName
* @return
*/
public static boolean WriteStoragePublic(String contents, String fileName) {
/**
* 外部存儲文件:Environment.DIRECTORY_DOWNLOADS
*
* 路徑:mnt/sdcard/Download/fileName
*/
File file = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
fileName);
boolean isWrite = false;
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(contents.getBytes());
isWrite = true;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isWrite;
}
/**
* 讀出外部public 數據
*
* @return
*/
public static String readStoragePublic(String fileName) {
File file = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
fileName);
StringBuffer stringBuffer = new StringBuffer();
FileInputStream fileInputStream = null;
BufferedReader br = null;
try {
fileInputStream = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(fileInputStream));
String line = null;
while ((line = br.readLine()) != null) {
stringBuffer.append(line);
}
return stringBuffer.toString();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
/**
* private 和public 存儲的路徑不一樣 private存到自己的包名下
*
* 寫入數據到private外部存儲
*
* @param contents
* @param fileName
* @return
*/
public static boolean WriteStoragePrivate(Context context,String contents, String fileName) {
/**
* 外部存儲文件:
*
* 路徑:mnt/sdcard/Android/data/包名/files/fileName
*/
File file = new File(context.getExternalFilesDir(null),fileName);
boolean isWrite = false;
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(contents.getBytes());
isWrite = true;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isWrite;
}
/**
* 讀出外部private 數據
*
* @return
*/
public static String readStoragePrivate(Context context,String fileName) {
File file = new File(context.getExternalFilesDir(null),fileName);
StringBuffer stringBuffer = new StringBuffer();
FileInputStream fileInputStream = null;
BufferedReader br = null;
try {
fileInputStream = new FileInputStream(file);
br = new BufferedReader(new InputStreamReader(fileInputStream));
String line = null;
while ((line = br.readLine()) != null) {
stringBuffer.append(line);
}
return stringBuffer.toString();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
/**
* 獲取文件字節總長度
* @return
*/
public static long getLength(){
File file = new File(Environment.getExternalStorageDirectory(),"");
long l = file.getTotalSpace();
return l;
}
/**
* 獲取文件剩餘字節總長度
* @return
*/
public static long getFreeLength(){
File file = new File(Environment.getExternalStorageDirectory(),"");
long l = file.getFreeSpace();
return l;
}
/**
* 根據文件名刪除指定的數據
* @return
*/
public static boolean isDelete(String fileName){
File file = new File(Environment.getExternalStoragePublicDirectory
(Environment.DIRECTORY_DOWNLOADS), fileName);
boolean b =file.delete();
return b;
}
}
TestCase
import android.R.bool;
import android.test.AndroidTestCase;
public class TestCase extends AndroidTestCase{
public void IsHas(){
boolean b = SdCardUtils.isExtraStorage();
System.out.println(b);
}
}