andriod外部存儲之ExtraStorage擴展存儲

ExtraStorage擴展存儲

特點: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);
    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章