Android_获取手机上SD卡和内存中的可用空间的大小

一.写一个根据路径获取摸个目录的可用空间的方法(也可以分区的个数*分区的大小获得该目录的总的空间大小)

        /**
	 * 根据路劲获取某个目录的可用空间
	 * 
	 * @param path
	 *            文件的路径
	 * @return result 返回该目录的可用空间大小
	 */
	private long getAvailSpace(String path) {
		StatFs statFs = new StatFs(path);

		statFs.getBlockCount();// 获取分区的个数
		int size = statFs.getBlockSize();// 获取分区的大小
		int blocks = statFs.getAvailableBlocks();// 获取可用分区的个数

		long result = blocks * size;
		return result;
	}

二.获取得到的空间的大小是long类型的

                // sd卡上可用空间的大小
		long sdsize = getAvailSpace(Environment.getExternalStorageDirectory()
				.getAbsolutePath());
		// 手机内存中可用空间的大小
		long romsize = getAvailSpace(Environment.getDataDirectory()
				.getAbsolutePath());
		Log.i(TAG, "SD卡上可用的空间为:" + sdsize + "手机内存中可用空间为:" + romsize);


三.格式化一下获得的数据,显示到界面上

		// 把获取到的sd卡上和手机内存中可用空间的大小显示在界面中
		// Formatter.formatFileSize()——一个区域化的文件大小格式化工具。
		tv_avail_sd.setText("SD卡可用:"
				+ Formatter.formatFileSize(AppManagerActivity.this, sdsize));
		tv_avail_rom.setText("内存可用:"
				+ Formatter.formatFileSize(AppManagerActivity.this, romsize));



个人总结记忆:

要获取某个空间的大小,首先要知道该空间的具体位置(path),根据path找到该空间(new StatFs(path)),因为硬盘是扇形分区,每个分区上有柱头的,所以可以根据该空间(statFs)得到每个分区的大小(getBlockSize()),还有分区的个数(getBlockCount()),以及可用分区的个数(getAvailableBlocks()),最后根据各种算式就能得到相应的大小。

你可能感兴趣的:(Android_获取手机上SD卡和内存中的可用空间的大小)