Android 如何获取SDCard 内存(二)

 2、讲述 StatFs 类
     StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
     StatFs 常用方法:

    getAvailableBlocks()
    解释:返回 Int ,获取当前可用的存储空间
    getBlockCount()
    解释:返回 Int ,获取该区域可用的文件系统数
    getBlockSize()
    解释:返回 Int ,大小,以字节为单位,一个文件系统
    getFreeBlocks()
    解释:返回 Int ,该块区域剩余的空间
    restat(String path)
    解释:执行一个由该对象所引用的文件系统

     3、完整例子读取 SDCard 内存
     存储卡在 Android 手机上是可以随时插拔的,每次的动作都对引起操作系统进行 ACTION_BROADCAST,本例子将使用上面学到的方法,计算出 SDCard 的剩余容量和总容量。代码如下:

1.package com.demo   
2.  
3.import java.io.File;   
4.import java.text.DecimalFormat;   
5.  
6.import android.R.integer;   
7.import android.app.Activity;   
8.import android.os.Bundle;   
9.import android.os.Environment;   
10.import android.os.StatFs;   
11.import android.view.View;   
12.import android.view.View.OnClickListener;   
13.import android.widget.Button;   
14.import android.widget.ProgressBar;   
15.import android.widget.TextView;   
16.import android.widget.Toast;   
17.  
18.public  
19.class getStorageActivity extends Activity {   
20.    private Button myButton;   
21.    /** Called when the activity is first created. */  
22.    @Override  
23.    public  
24.void onCreate(Bundle savedInstanceState) {   
25.        super.onCreate(savedInstanceState);   
26.        setContentView(R.layout.main);   
27.        findView();   
28.        viewHolder.myButton.setOnClickListener(new OnClickListener() {   
29.               
30.            @Override  
31.            public  
32.void onClick(View arg0) {   
33.                // TODO Auto-generated method stub   
34.                getSize();   
35.            }   
36.        });   
37.    }   
38.      
39.      
40.    void findView(){   
41.        viewHolder.myButton=(Button)findViewById(R.id.Button01);   
42.        viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar);   
43.        viewHolder.myTextView=(TextView)findViewById(R.id.myTextView);   
44.    }   
45.      
46.      
47.      
48.    void getSize(){   
49.        viewHolder.myTextView.setText("");   
50.        viewHolder.myBar.setProgress(0);   
51.        //判断是否有插入存储卡   
52.  
53.if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){   
54.            File path =Environment.getExternalStorageDirectory();   
55.            //取得sdcard文件路径   
56.            StatFs statfs=new StatFs(path.getPath());   
57.            //获取block的SIZE   
58.  
59.long blocSize=statfs.getBlockSize();   
60.            //获取BLOCK数量   
61.  
62.long totalBlocks=statfs.getBlockCount();   
63.            //己使用的Block的数量   
64.  
65.long availaBlock=statfs.getAvailableBlocks();   
66.               
67.            String[] total=filesize(totalBlocks*blocSize);   
68.            String[] availale=filesize(availaBlock*blocSize);   
69.            //设置进度条的最大值   
70.  
71.int maxValue=Integer.parseInt(availale[0])   
72.            *viewHolder.myBar.getMax()/Integer.parseInt(total[0]);   
73.            viewHolder.myBar.setProgress(maxValue);   
74.            String Text="总共:"+total[0]+total[1]+"\n"  
75.+"可用:"+availale[0]+availale[1];   
76.            viewHolder.myTextView.setText(Text);   
77.               
78.        }else  
79.if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){   
80.            Toast.makeText(getStorageActivity.this, "没有sdCard", 1000).show();   
81.        }   
82.    }   
83.      
84.    //返回数组,下标1代表大小,下标2代表单位 KB/MB   
85.    String[] filesize(long size){   
86.        String str="";   
87.        if(size>=1024){   
88.            str="KB";   
89.            size/=1024;   
90.            if(size>=1024){   
91.                str="MB";   
92.                size/=1024;   
93.            }   
94.        }   
95.        DecimalFormat formatter=new DecimalFormat();   
96.        formatter.setGroupingSize(3);   
97.        String result[] =new String[2];   
98.        result[0]=formatter.format(size);   
99.        result[1]=str;   
100.        return result;   
101.    }   
102.}  

你可能感兴趣的:(android)