Android SDCard操作(文件读写,容量计算)

原文:http://crackren.iteye.com/blog/747121

android.os.Environment

提供访问环境变量

 

java.lang.Object  
  android.os.Environment  

Environment 静态方法:

 

方法 : getDataDirectory ()

返回 : File

解释 : 返回Data的目录

方法 : getDownloadCacheDirectory ()

返回 : File

解释 : 返回下载缓冲区目录

方法 : getExternalStorageDirectory ()

返回 : File

解释 : 返回扩展存储区目录(SDCard)

方法 : getExternalStoragePublicDirectory (String type)

返回 : File

解释 : 返回一个高端的公用的外部存储器目录来摆放某些类型的文件(来自网上)

方法 : getRootDirectory ()

返回 : File

解释 : 返回Android的根目录

方法 : getExternalStorageState ()

返回 : String

解释 : 返回外部存储设备的当前状态

 

getExternalStorageState () 返回的状态String 类型常量
:

常量 : MEDIA_BAD_REMOVAL

值    : "bad_removal"

解释 : 在没有正确卸载SDCard之前移除了

 

常量 : MEDIA_CHECKING

值    : "checking"

解释 : 正在磁盘检查

 

常量 : MEDIA_MOUNTED

值    : "mounted"

解释 : 已经挂载并且拥有可读可写权限

 

常量 : MEDIA_MOUNTED_READ_ONLY

值    : "mounted_ro"

解释 : 已经挂载,但只拥有可读权限

 

常量 : MEDIA_NOFS

值    : "nofs"

解释 : 对象空白,或者文件系统不支持

 

常量 : MEDIA_REMOVED

值    : "removed"

解释 : 已经移除扩展设备

 

常量 : MEDIA_SHARED

值    : "shared"

解释 : 如果SDCard未挂载,并通过USB大容量存储共享

 

常量 : MEDIA_UNMOUNTABLE

值    : "unmountable"

解释 : 不可以挂载任何扩展设备

 

常量 : MEDIA_UNMOUNTED

值    : "unmounted"

解释 : 已经卸载

 

使用时只需先判断SDCard当前的状态然后取得SdCard的目录即可(见源代码)

   	//SDcard 操作
	public void SDCardTest() {
		// 获取扩展SD卡设备状态
		String sDStateString = android.os.Environment.getExternalStorageState();

		// 拥有可读可写权限
		if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {

			try {

				// 获取扩展存储设备的文件目录
				File SDFile = android.os.Environment
						.getExternalStorageDirectory();

				// 打开文件
				File myFile = new File(SDFile.getAbsolutePath()
						+ File.separator + "MyFile.txt");

				// 判断是否存在,不存在则创建
				if (!myFile.exists()) {
					myFile.createNewFile();
				}

				// 写数据
				String szOutText = "Hello, World!";
				FileOutputStream outputStream = new FileOutputStream(myFile);
				outputStream.write(szOutText.getBytes());
				outputStream.close();

			} catch (Exception e) {
				// TODO: handle exception
			}// end of try

		}// end of if(MEDIA_MOUNTED)
		// 拥有只读权限
		else if (sDStateString
				.endsWith(android.os.Environment.MEDIA_MOUNTED_READ_ONLY)) {

			// 获取扩展存储设备的文件目录
			File SDFile = android.os.Environment.getExternalStorageDirectory();

			// 创建一个文件
			File myFile = new File(SDFile.getAbsolutePath() + File.separator
					+ "MyFile.txt");

			// 判断文件是否存在
			if (myFile.exists()) {
				try {

					// 读数据
					FileInputStream inputStream = new FileInputStream(myFile);
					byte[] buffer = new byte[1024];
					inputStream.read(buffer);
					inputStream.close();

				} catch (Exception e) {
					// TODO: handle exception
				}// end of try
			}// end of if(myFile)
		}// end of if(MEDIA_MOUNTED_READ_ONLY)
	}// end of func

 

计算SDCard的容量大小

android.os.StatFs

一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况

 

java.lang.Object  
  android.os.StatFs

 

构造方法:

StatFs (String path)

 

公用方法:

 

方法 : getAvailableBlocks ()

返回 : int

解释 :返回文件系统上剩下的可供程序使用的块

 

方法 : getBlockCount ()

返回 : int

解释 : 返回文件系统上总共的块

 

方法 : getBlockSize ()

返回 : int

解释 : 返回文件系统 一个块的大小单位byte

 

方法 : getFreeBlocks ()

返回 : int

解释 : 返回文件系统上剩余的所有块 包括预留的一般程序无法访问的

 

方法 : restat (String path)

返回 : void

解释 : 执行一个由该对象所引用的文件系统雷斯塔特.(Google翻译)

 

 

想计算SDCard大小和使用情况时, 只需要得到SD卡总共拥有的Block数或是剩余没用的Block数,再乘以每个Block的大小就是相应的容量大小了单位byte.(见代码)

 

   	public void SDCardSizeTest() {

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

		if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) {

			// 取得sdcard文件路径
			File pathFile = android.os.Environment
					.getExternalStorageDirectory();

			android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());

			// 获取SDCard上BLOCK总数
			long nTotalBlocks = statfs.getBlockCount();

			// 获取SDCard上每个block的SIZE
			long nBlocSize = statfs.getBlockSize();

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

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

			// 计算SDCard 总容量大小MB
			long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024;

			// 计算 SDCard 剩余大小MB
			long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024;
		}// end of if
	}// end of func

主要:

在判断SDCard的状态为MEDIA_MOUNTED后,仅是说明硬件已经准备好可读可写

如果想叫你的程序也可写的话,还需要在工程的XML文件中加上操作扩展存储设备的权限

 

方法:

在 XML文件中 Permissions 标签中 点击Add 添加 Uses Permission 名字选择 

android.permission.WRITE_EXTERNAL_STORAGE

 

或者直接在xml文件中添加下面一句即可.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

时间: 2024-10-31 16:53:42

Android SDCard操作(文件读写,容量计算)的相关文章

流-Android 关于操作文件IO的相关问题

问题描述 Android 关于操作文件IO的相关问题 大神们给我看看下面我这个方法哪里错了?为什么总是移动文件失败!下面是输出打印的两句路径: /storage/sdcard0/dcim/Camera/IMG_20151127_094856.jpg /storage/sdcard0/baidu/searchbox/preset/preset4.2/pic/ /** * 移动至指定文件夹 * @param path * @param newPath * @return */ public stat

Android游戏之文件读写类和绘图类设计

Android游戏之文件读写类和绘图类设计   1.基础知识: A. FileInputStream http://developer.android.com/reference/java/io/FileInputStream.htmlB. FileOutputStreamhttp://developer.android.com/reference/java/io/FileOutputStream.htmlC. Environment.getExternalStorageDirectory()h

Android编程之文件读写操作与技巧总结【经典收藏】_Android

本文实例总结了Android文件读写操作.分享给大家供大家参考,具体如下: 在Android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResources

Android编程之文件读写操作与技巧总结【经典收藏】

本文实例总结了Android文件读写操作.分享给大家供大家参考,具体如下: 在Android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResources

android sdcard 创建文件总是失败!

问题描述 小弟最近在做一个MP3播放器当作练习,可是到在SDCard创建文件时老是报错,弄了好几天都解决不了.麻烦各位指点迷津,非常感谢.每当执行到file.createNewFile()就报错,报错信息是java.io.IOException: invalid argument目录能够成功创建,就文件不行.目录路径:/mnt/sdcard/mp3/ 文件路径:/mnt/sdcard/mp3/heart.mp3注:sdcard文件操作权限已添加 问题补充:非常感谢lz解答,可能我表达的不清楚,我

Android开发5——文件读写

一.基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录 保存的位置通过android的file explorer视图可以找到     二.例子 /** * 文件操作类 * * @author

Android sdcard媒体文件更新

本文出之于网络,非本人撰写             Android平台基于Linux和开放手机联盟(OHA)系统,经过中国移动的创新研发,设计出拥有新颖独特的用户操作界面,增强了浏览器能力和WAP 兼容性,优化了多媒体领域的OpenCORE.浏览器领域的WebKit等业内众多知名引擎,增加了包括游戏.Widget.Java ME等在内的先进平台中间件.本文主要介绍如何利用OPhone平台提供的多媒体编程环境进行音乐资源的管理与播放. MediaScanner与音乐信息扫描 Android系统在S

实用正则表达式扫描android SDcard的文件

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 8

Android中使用SDcard进行文件的读取方法

  在AndroidManifest.xml中加入访问SDCard的权限如下:   <!-- 在SDCard中创建与删除文件权限 -->  代码如下 复制代码   <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  <!-- 往SDCard写入数据权限 -->  代码如下 复制代码  <uses-permission android:na