zoukankan      html  css  js  c++  java
  • Android之获取内外部存储器的容量

    先来了解一下存储卡的相关知识:

    我们新购买的磁盘或SD卡在使用之前,要让操作系统认得它,须先写入一些磁性的记号到磁盘上的每一扇区,便可在该操作系统下取用磁盘上的数据,这个过程就是格式化。

    格式化可以直白地看作把你的磁盘或SD卡分成若干个小格(block),然后才能往里面存数据,每个文件所占的“小格”是不同的。如果没有进行格式化是无法存数据的,现在买来的SD卡一般都已经格式化好了,可以直接用。

    可以做一个小实验,你可以在Windows系统下新建一个文本文件,然后往里面写入一个字符,查看属性里面的大小是1字节,但是占用空间却是4kb(4096个字节),只有当你的存储内容超过了4kb,这时,文件的占用空间又变为8kb,由此可以看出,文件的存储块的大小事4kb。


    现在来看看如何通过代码拿到android的内外存储器的大小:

    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		externalTv = (TextView) findViewById(R.id.tv1);
    		internalTv = (TextView) findViewById(R.id.tv2);
    		
    		//首先检查SD卡的状态,是否被挂载或移除
    		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
    			//拿到SD卡(外部存储设备,不一定是sd卡)的文件目录
    			String path = Environment.getExternalStorageDirectory().getPath();
    			//一个包装类,用来检索文件系统的信息
    			StatFs stat = new StatFs(path);
    			//文件系统的块的大小(byte)
    			long blockSize = stat.getBlockSize();
    			//文件系统的总的块数
    			long totalBlocks = stat.getBlockCount();
    			//文件系统上空闲的可用于程序的存储块数
    			long availableBlocks = stat.getAvailableBlocks();
    			
    			//总的容量
    			long totalSize = blockSize*totalBlocks;
    			long availableSize = blockSize*availableBlocks;
    			
    			String totalStr = Formatter.formatFileSize(this, totalSize);
    			String availableStr = Formatter.formatFileSize(this, availableSize);
    			
    			externalTv.setText("外部存储的容量"+"
    "+"总大小:"+totalStr+"
    "+"可用大小:"+availableStr);
    		}
    		else {
    			Toast.makeText(this,
    					"SD卡不可用,请检查SD卡的状态",
    					Toast.LENGTH_LONG).show();
    		}
    		
    		File path = Environment.getDataDirectory();
    		StatFs stat = new StatFs(path.getPath());
    		
    		//文件系统的块的大小(byte)
    		long blockSize1 = stat.getBlockSize();
    		//文件系统的总的块数
    		long totalBlocks1 = stat.getBlockCount();
    		//文件系统上空闲的可用于程序的存储块数
    		long availableBlocks1 = stat.getAvailableBlocks();
    		
    		//总的容量
    		long totalSize1 = blockSize1*totalBlocks1;
    		long availableSize1 = blockSize1*availableBlocks1;
    		
    		String totalStr1 = Formatter.formatFileSize(this, totalSize1);
    		String availableStr1 = Formatter.formatFileSize(this, availableSize1);
    		
    		internalTv.setText("内部存储的大小"+"
    "+"总大小:"+totalStr1+"
    "+"可用大小:"+availableStr1);
    	}


  • 相关阅读:
    ECharts之柱状图 饼状图 折线图
    Vue自定义指令(directive)
    HDU 1231 最大连续子序列
    POJ 2533 Longest Ordered Subsequence
    HDU 1163 Eddy's digital Roots
    HDU 2317 Nasty Hacks
    HDU 2571 命运
    HDU 4224 Enumeration?
    HDU 1257 最少拦截系统
    HDU 2740 Root of the Problem
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3249360.html
Copyright © 2011-2022 走看看