Android利用StatFs查看SDCard物理信息

简介: package cn.sohu.com;//1 查看SDCard相关信息的主要使用到的是StatFs类,没有其余难点//2 从SDCard中读取txt文件要注意// 第一:txt文件应该要按照UTF-8保存的.
package cn.sohu.com;
//1 查看SDCard相关信息的主要使用到的是StatFs类,没有其余难点
//2 从SDCard中读取txt文件要注意
//  第一:txt文件应该要按照UTF-8保存的.因为默认的是ANSI编码的!!!!!
//  第二:不能使用openFileInput(filePath)方法获取输入流.因为此方法的参数要求不能含有路径分隔符.
//       若这么做,报错:………………………………………………cannot contain  path separator
//
//
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class TestSDCardActivity extends Activity {
   private Button SDbutton;
   private Button Filebutton;
   private TextView textView;
   private EditText editText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);       
        SDbutton=(Button) findViewById(R.id.Button1);
        Filebutton=(Button) findViewById(R.id.Button2);
        textView=(TextView) findViewById(R.id.textView);       
        SDbutton.setOnClickListener(new OnClickListener() {			
			@Override
			public void onClick(View v) {		
				if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断是否安装SDCard
					File SDFile=Environment.getExternalStorageDirectory();
					StatFs statFs=new StatFs(SDFile.getPath());
					long blockSize=statFs.getBlockSize();//块容量
					float blocksCount=statFs.getBlockCount();//块数量					
					int sizeM=(int) ((blockSize*blocksCount)/1024/1024);//总容量
					long ableBlocks=statFs.getAvailableBlocks();//可用容量
					int percent=(int) ((ableBlocks/blocksCount)*100);//可用百分比
					textView.setText("SDCard使用情况如下:\n"+"blockSize="+blockSize+",totalBlocks="+blocksCount+",sizeM="+sizeM+",ableBlocks="+ableBlocks+"\n"+"使用率:\n"+percent+"%");																	
				}else{
					Toast.makeText(getApplicationContext(), "未找到SDCard", 1).show();
				}				
			}
		});
        Filebutton.setOnClickListener(new OnClickListener() {			
			@Override
			public void onClick(View v) {
			       editText =(EditText) findViewById(R.id.editeView);
			       String fileName=editText.getText().toString();
			       String filePath=Environment.getExternalStorageDirectory().toString()+"/"+fileName;			       			       
				   try {
					String result=read(filePath);
					Log.i("Tag", "result="+result);
					textView.setText(result);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
    }
    

	public String read(String filePath) throws Exception{
		//openFileInput方法的参数cannot contain  path separator
		File file=new File(filePath);
		FileInputStream inputStream=new FileInputStream(file);
		//FileInputStream inputStream=TestSDCardActivity.this.openFileInput(filePath);//注意这句代码!!!!!
		ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
		byte [] b=new byte[1024];
		int len=0;
		while((len=inputStream.read(b))!=-1){
			outputStream.write(b, 0, len);
			Log.i("Tag", "len="+len);
		}
		outputStream.flush();
		String result=outputStream.toString("UTF-8");
		outputStream.close();
		inputStream.close();
		return result;
	}
}

相关文章
|
7月前
|
Java Android开发
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
962 0
|
2月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
353 2
|
7月前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
460 2
|
6月前
|
存储 Android开发
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
92 0
|
7月前
|
安全 物联网 Android开发
安卓物联网(IoT)应用开发:连接物理世界
【4月更文挑战第14天】本文探讨了安卓平台在物联网应用开发中的角色,强调了设备连接性、数据处理、用户界面、安全性和可扩展性五大关键点。通过举例说明了一个智能家居应用的开发流程,涉及通信协议、用户界面设计、数据安全及可扩展性的实现。安卓物联网应用开发结合了多领域知识,为创造智能、安全的生活解决方案提供了广阔空间。
501 2
|
7月前
|
Shell 开发工具 Android开发
android 修改kernel编译版本信息
android 修改kernel编译版本信息
89 0
|
7月前
|
Android开发
Android 获取签名信息
Android 获取签名信息
64 0
|
7月前
|
Shell Android开发
android mk中打印信息
android mk中打印信息
39 0
|
7月前
|
Android开发
Android 9.0中sdcard 的权限和挂载问题
Android 9.0中sdcard 的权限和挂载问题
100 0
|
7月前
|
测试技术 Android开发
Android App获取不到pkgInfo信息问题原因
Android App获取不到pkgInfo信息问题原因
240 0