android 获得SDCard信息

android 获得SDCard信息
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <!-- 显示block的数量的标签控件 -->
    <TextView
        android:id="@+id/tv_TotalBlocks"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <!-- 显示block的大小的标签控件 -->
    <TextView
        android:id="@+id/tv_BlocSize"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <!-- 显示可用block的标签控件 -->
    <TextView
        android:id="@+id/tv_AvailaBlock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <!-- 显示空block的标签控件 -->
    <TextView
        android:id="@+id/tv_FreeBlock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <!-- 显示SDCard的总大小的标签控件 -->
    <TextView
        android:id="@+id/tv_SDTotalSize"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <!-- 显示SDCard的剩余大小的标签控件 -->
    <TextView
        android:id="@+id/tv_SDFreeSize"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
package com.example.yanlei.yl2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import java.io.File;



public class MainActivity extends AppCompatActivity {
    private TextView mTvTotalBlocks;        //SDCard上BLOCK总数
    private TextView mTvBlocSize;            //SDCard上每个block的SIZE
    private TextView mTvAvailaBlock;        //可供程序使用的Block的数量
    private TextView mTvFreeBlock;            //剩下的所有Block的数量(包括预留的一般程序无法使用的块)
    private TextView mTvSDTotalSize;        //SDCard 总容量大小MB
    private TextView mTvSDFreeSize;            //SDCard 剩余大小MB

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 得到布局中的控件
        findView();
        // 绑定控件事件
        SDCardSizeTest();
    }

    private void findView() {
        // 绑定控件
        mTvTotalBlocks = (TextView)findViewById(R.id.tv_TotalBlocks);
        mTvBlocSize = (TextView)findViewById(R.id.tv_BlocSize);
        mTvAvailaBlock = (TextView)findViewById(R.id.tv_AvailaBlock);
        mTvFreeBlock = (TextView)findViewById(R.id.tv_FreeBlock);
        mTvSDTotalSize = (TextView)findViewById(R.id.tv_SDTotalSize);
        mTvSDFreeSize = (TextView)findViewById(R.id.tv_SDFreeSize);
    }


    public void SDCardSizeTest() {
        // 取得SDCard当前的状态
        String sDcString = android.os.Environment.getExternalStorageState();

        //如果当前系统有sdcard存在
        if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) {
            // 取得sdcard文件路径
            File pathFile = android.os.Environment
                    .getExternalStorageDirectory();
            //得到sdcard的状态
            android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());

            // 获取SDCard上BLOCK总数
            long nTotalBlocks = statfs.getBlockCount();
            mTvTotalBlocks.setText("SDCard上BLOCK总数: "+nTotalBlocks);

            // 获取SDCard上每个block的SIZE
            long nBlocSize = statfs.getBlockSize();
            mTvBlocSize.setText("SDCard上每个bloc的SIZE:"+nBlocSize);

            // 获取可供程序使用的Block的数量
            long nAvailaBlock = statfs.getAvailableBlocks();
            mTvAvailaBlock.setText("可供程序使用的Block的数量 : " + nAvailaBlock);

            // 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
            long nFreeBlock = statfs.getFreeBlocks();
            mTvFreeBlock.setText("剩下的所有Block的数量: " + nFreeBlock);

            // 计算SDCard 总容量大小MB
            long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024;
            mTvSDTotalSize.setText("SDCard 总容量大小MB: " + nSDTotalSize +"MB");

            // 计算 SDCard 剩余大小MB
            long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024;
            mTvSDFreeSize.setText(" SDCard 剩余大小MB: " + nSDFreeSize +"MB");
        }
    }
}

 

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private TextView myTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myTextView=   (TextView)findViewById(R.id.myTextView);
        StringBuilder log = new StringBuilder();
        String inPath = getInnerSDCardPath();
        String str="内置SD卡路径:" + inPath + "\r\n";
        log.append("内置SD卡路径:" + inPath + "\r\n");

        List<String> extPaths = getExtSDCardPath();
        for (String path : extPaths) {
            str=str+"外置SD卡路径:" + path + "\r\n";
            log.append("外置SD卡路径:" + path + "\r\n");
        }
        myTextView.setText(str);
        System.out.println(log.toString());
    }

    /**
     * 获取内置SD卡路径
     * @return
     */
    public String getInnerSDCardPath() {
        return Environment.getExternalStorageDirectory().getPath();
    }

    /**
     * 获取外置SD卡路径
     * @return  应该就一条记录或空
     */
    public List<String> getExtSDCardPath()
    {
        List<String> lResult = new ArrayList<String>();
        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("mount");
            InputStream is = proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                if (line.contains("extSdCard"))
                {
                    String [] arr = line.split(" ");
                    String path = arr[1];
                    File file = new File(path);
                    if (file.isDirectory())
                    {
                        lResult.add(path);
                    }
                }
            }
            isr.close();
        } catch (Exception e) {
        }
        return lResult;
    }