SD卡管理

参考:

http://www.linuxidc.com/Linux/2011-02/32603.htm

http://blog.youkuaiyun.com/loongggdroid/article/details/12304695

http://blog.youkuaiyun.com/cool_oyty/article/details/9851125

判断内置SD卡和外置SD卡的方法,很赞:http://www.eoeandroid.com/thread-308773-1-1.html

android获取手机内部存储空间和外部存储空间 && 如何确定一个应用的安装位置:http://blog.youkuaiyun.com/zhandoushi1982/article/details/8560233

一、仅仅在app内部可以访问的文件,也就是说app的私有文件,全部api都存在于Context类中,如果app被卸载,则这些私有文件将要被删除(仅仅是app被关闭,则不会被删除)。

1. 在ROM中存储的文件

(1)openFileInput(String name); 

(2)openFileOutput(String name, int mode);

(3)getFilesDir();

(4)getCacheDir();

2. 在SD卡上存储的,只能在app内部访问的文件

(1)getExternalFilesDir(String type);

(2)getExternalCacheDir();

二、不同应用程序之间可以共享访问的文件,全部api都存在于Environment类中:

(1)getExternalStoragePublicDirectory()

三、获得SDCard目录

(2)getExternalStorageDirectory(),这个函数式返回SDCard的存储目录,包含了共享的getExternalStoragePublicDirectory()目录,和app私有的getExternalFilesDir(String type)目录。


共享首选项SharedPreference以及Context中的openFileInput()/openFileOutput()对应的目录分别是/data/data/<package-name>/shared_prefs/文件名.xml和/data/data/<package-name>/files/文件名,而/data就是手机Rom中的目录。


ROM路径为/data
内置sd卡或sd卡1的路径为/mnt/sdcard,在4.1以后也可用路径/storage/sdcard0
外置sd卡或sd卡2的路径为/mnt/sdcard,在4.1以后也可用路径/storage/sdcard1
由于android原生系统只有1个sd卡,但是现在市面上很多国产机都是双卡,官方的Environment.getExternalStorageDirectory()满足不了各位的胃口.
所以在下写了一个demo,可以获得外部sd卡也就是卡2的空间,当然只要设备挂载上去了就不会有问题.
如果没有sd卡2也没关系,只要在StatFS(String path)这里catch住异常就可以了.
希望对各位有用!
还有一点要注意的就是StatFs这个类更新的很慢,所以你去看官方文档会发现里面的方法不是API 1就是API 18.
本例中用到的都是API 1的方法,所以大家不必担心虚拟机或是手机的系统版本问题.

哦,差点忘了,还要提示一下大家在使用StatFs这个类里面API 1的方法时要注意一点,现在的手机很多sd卡都是16G的,还有32G的.
而API 1的接口返回的值是Int的,为了避免溢出,所以我使用了float来记录,并将计算空间的部分写成这样:
stat.getAvailableBlocks()* (stat.getBlockSize() / (1024f * 1024f))

而不是这样:
stat.getAvailableBlocks()* stat.getBlockSize() / (1024f * 1024f)

下面是源代码,直接下载就可以跑了.

public class MainActivity extends Activity {
	private final String TAG = MainActivity.class.getSimpleName();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView internalMemoryTextView = (TextView) findViewById(R.id.rom_left);
		TextView externalMemoryTextView = (TextView) findViewById(R.id.inside_sd_left);
		TextView sdCard2MemoryTextView = (TextView) findViewById(R.id.outside_sd_left);
		internalMemoryTextView.setText("rom left " + getAvailableInternalMemorySize() + "MB");
		externalMemoryTextView.setText("rom left " + getAvailableExternalMemorySize() + "MB");
		sdCard2MemoryTextView.setText("rom left " + getAvailableSDCard2MemorySize() + "MB");
	}

	/**
	 * 
	 * <a href="\"http://www.eoeandroid.com/home.php?mod=space&uid=7300\""
	 * target="\"_blank\"">@return</a> ROM存储路径
	 */
	private String getInternalMemoryPath() {
		return Environment.getDataDirectory().getPath();
	}

	/**
	 * 
	 * @return 内置sd卡路径
	 */
	private String getExternalMemoryPath() {
		// return Environment.getExternalStorageDirectory().getPath();
		return "/mnt/sdcard";
	}

	/**
	 * 
	 * @return 外置sd卡路径
	 */
	private String getSDCard2MemoryPath() {
		return "/mnt/sdcard1";
	}

	/**
	 * 
	 * @param path
	 *            文件路径
	 * @return 文件路径的StatFs对象
	 * @throws Exception
	 *             路径为空或非法异常抛出
	 */
	private StatFs getStatFs(String path) {
		try {
			return new StatFs(path);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 
	 * @param stat
	 *            文件StatFs对象
	 * @return 剩余存储空间的MB数
	 * 
	 */
	private float calculateSizeInMB(StatFs stat) {
		if (stat != null) {
			return stat.getAvailableBlocks() * (stat.getBlockSize() / (1024f * 1024f));
		}
		return 0.0f;
	}

	/**
	 * 
	 * @return ROM剩余存储空间的MB数
	 */
	private float getAvailableInternalMemorySize() {
		String path = getInternalMemoryPath();// 获取数据目录
		StatFs stat = getStatFs(path);
		return calculateSizeInMB(stat);
	}

	/**
	 * 
	 * @return 内置SDCard剩余存储空间MB数
	 */
	private float getAvailableExternalMemorySize() {
		String path = getExternalMemoryPath();// 获取数据目录
		StatFs stat = getStatFs(path);
		return calculateSizeInMB(stat);

	}

	/**
	 * 
	 * @return 外置SDCard剩余存储空间MB数
	 */
	private float getAvailableSDCard2MemorySize() {
		String path = getSDCard2MemoryPath(); // 获取数据目录
		StatFs stat = getStatFs(path);
		return calculateSizeInMB(stat);
	}
}


手机Rom Ram sd卡:

Android手机,除了CPU外,接下来最重要的可能就是ROM、RAM、SD卡的大小了; I9 p: J% q5 A8 u
, J) j( _4 T2 T! }8 V/ O2 a
玩Android手机的朋友,特别是要买Android手机的朋友,那就得赶紧来了解一下手机内存ROM、RAM还有SD卡的重要性了,不然,在买手机的时候可能会吃亏。

因为一些手机厂家在宣传自己手机的时候,会声称自己的手机内存有4G或者多少G,但其实有些混淆概念,在手机行业里,发展到现在,其实已经把ROM、RAM、SD卡都混淆通称为内存了,这个是商家的误导,很多商家在宣传时将SD卡和ROM宣传成内存,混淆视听,让你以为这个手机的内存很大,其实这并非真正意义上的内存RAM。

RAM,白话来讲,就是我们常说的真正意义上的内存,就相当于你电脑的内存,目前来说512M的RAM可以保证任何手机的流畅性,毕竟目前的电脑使用1G内存都可以保证基本的使用。

ROM,简单的说,就是相当于你windows电脑的C盘,这个也非常非常重要,试想一下,如果安装了操作系统后,你的C盘只有一点点空间,那会导致什么后果?就算你的RAM再大,你的电脑也会死机,也会慢的像蜗牛。而Android手机中,ROM的重要性也更是非常重要,如果你的Android手机ROM只有512M,那么你的手机操作系统就会占去100M或200M,那么你最后就剩下不到300M的ROM可以使用,这300M会被如何使用?首先你的联系人如果有1000人,那么就会占去40多M的空间,每次安装一个程序或者游戏,即便你安装到了SD卡中,但你的ROM空间依然还是会被占用一部分,其次系统自带的应用、浏览器、地图、电话、短信等等历史记录,全部都存在ROM中,如果你是手机玩家,这ROM空间就会往往完全不够使用,而且让你的手机变的很慢,目前来讲,1G以上的ROM才会刚刚够,当然,如果你只是普通手机用户,不安装什么应用程序,那么512M的ROM还是够用的。
7 r+ A$ I! w4 `
最早的Android手机,在大家还未了解ROM的重要性的时候,推出了大批ROM只有512M的手机,结果是导致N多人反映手机ROM不够用了,或者说手机很慢,所以后来就出现了APP2SD等这类将程序转移到SD卡中的怪异功能,其实完全是亡羊补牢,更有甚者,还逼的一些ROM大师不得不为大家之作一些瘦身版的ROM(此时讲的ROM是指操作系统)供大家使用。

SD,我们俗称就是手机的外部存储空间,这个我们可以理解成电脑的D盘、E盘,或者外接移动硬盘也行,这个地方本来是放我们的多媒体资料的,我们知道,电脑的D盘其实是可以安装程序的,但是这一点却和Android不同,即便你使用了APP2SD类的软件将各类应用程序安装到了SD卡中,其实程序的系统数据还是写在了ROM中,SD卡相当于只是存放多媒体类的资料,如游戏的数据文件。% C1 M3 ?* `4 M& R

所有的Android手机都支持SD卡,SD卡大小则显得很不重要,因为即便是你的手机送的SD卡只有512M,但是你依然可以花100元可以到电脑城里面买到16G或者更大的SD卡。

SD女佣 SD Maid Pro将会以完善的方式帮您整理、清洁android设备。”浏览器”是一个完全成熟的文件管理器,用它来浏览管理你的android文件夹。”搜索器”可以使用来打来/删除 或者重命名文件(搜索文件内部,支持通配符)。”查找冗余”可以搜索你设备的空文件夹目录,并且比较那些已安装的应用程序列表。”应用控制”可以冻结、重置以及删除应用程序(甚至是系统应用程序)。”清理系统”可以清理设备中已知的不必要的目录。”优化数据库”检测数据库((System/Apps),并可以整理压缩数据库,以加快访问,以及腾出更多的可用空间。 这个来自您Android设备的女佣,会让你的存储器恢复到整洁状态并保持下去。 这个程序最好安装在已经ROOT的Android设备 ! 没有ROOT的设备,SD女佣对必要的目录没有访问权限。 这是一个强大的工具 !但是使用它会有相对而言的风险 ! 最好不要安装非官方版本的SD女佣,它们“签证包”是错误,会带来不安全因素。 金无足赤人无完人, Android也是如此。 被你删除的应用程序有时候会留下的残留数据。 android系统也会不断创建日志、 崩溃报告和普通用户用不上调试文件。 在您使用“谷歌应用市场”下载应用程序之后,它会产生临时文件(如同浏览器访问网站一样)。 让我们来搞定这些无用的垃圾 … … 为什么不使用“SD女佣”来一次全面的清洁呢?SD 女佣将会以完善的方式帮您整理、清洁android设备 (^.^)! 选择一个标签项,点击”检查”,然后点击”全部清理”或者根据需求单个的选择。它就这么的容易。 “浏览器”是一个完全成熟的文件管理器,用它来浏览管理你的android文件夹。 “搜索器”可以使用来打来/删除 或者重命名文件(搜索文件内部,支持通配符)。 “查找冗余”可以搜索你设备的空文件夹目录,并且比较那些已安装的应用程序列表。 “应用控制”可以冻结、重置以及删除应用程序(甚至是系统应用程序)。 “清理系统”可以清理设备中已知的不必要的目录。 “优化数据库”检测数据库((System/Apps),并可以整理压缩数据库,以加快访问,以及腾出更多的可用空间。 此外,你也可以查看”最大文件”,或者查看上次修改的文件。 免费版可以使用10个主要功能,另外2个高级功能,需要购买“解锁器”来解锁。 SD女佣正在精益求精的不断的研发和设计中。
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值