Android 文件存放路径【转】

简介:

对于应用携带的静态数据,可以放置在应用的assets目录或者res,raw目录下。
对于assets目录下的静态数据,存在当文件最大支持1MB的局限,读取方式如下:

1 InputStream is = getAssets().open("xxx.xx");

对于res,raw目录下的文件,可以通过如下方式读取:

1 InputStream is = resources.openRawResource.(R.raw.xxx);

另外,Android还对创建缓存提供了支持,通过getCacheDir()可以获取应用的缓存路径,在系统可用空间不足时,Android会清空缓存,但对于开发者而言,不应维护过多的缓存。用户可以通过系统的设置来手动清空缓存,有人也用这个缓存来做图片的缓存,但是吧,虽然少了用了流量,但是对程序的效率来说就只是缩短了一个网络下载时间而已。开发者可以根据自己应用的特性来选择是否使用这个缓存空间。

Android支持在SD卡上的应用私有目录,在Froyo版本后,通过getExternalFilesDir()可以获得具体路径。该路径依赖与应用的包名,如果你包为hello.file那么SD开上的应用私有目录为\mnt\sdcard\Android\data\hello.file\files\.如果希望存储在SD卡上的公共目录下,可以通过getExternalStoragePublicDirectory()公共目录的具体路径视需要存储的文件类型而定。

SD上的应用需要的缓存较大,也可以在SD卡上建立缓存目录,在Froyo版本后,通过getExternalCacheDir()可以获取应用在SD卡上的缓存路径。在使用SD卡目录时,需注意SD卡是否挂载,可通过Environment.getExternalStorageState()方法进行判断,如果返回值为Envirnment.MEDIA_MOUNTED表示SD卡处于挂载状态,可以放心使用。

SQLite的中的事务处理。当需要一次性修改多个数据时,建议通过SQLite的事务处理进行批量处理,这有利于提高执行的效率。事务处理相关的方法如下:

1 public void beginTransaction();
2 public void beginTransactionWithListener(SQLiteTransactionListener transactionListener);
3 public void endTransaction();
4 public void inTransaction();
5 public void setTransactionSuccessful();

 此外还有使用SharedPreferences来存储的xml文件,究其本质其实还是<key,value>值对。Android中XML文件更多的用来维护应用或者系统的配置文件,我们在开发中一般用SharedPreferences也是保存一些应用的配置信息,记录用户的某些操作,例如:用户是不是第一次进入应用,用户是否选择了保存用户名和密码和用户的某些偏好设置等等,Android根据配置信息是否对其他应用开放,SharedPreferences提供了两种权限,MODE_PRIVATE和MODE_WORLD_READABLE。该数据存放在\data\data\包.名\shared_prefs文件夹下,文件扩展名为.xml。数据以这种形式存储:

<map><boolean name="firstFlag" value="true" /></map>
获取SharedPreferences的方法:(该变量一般作为全局变量,放到Activity的OnCreate方法中初始化,我遇到有人在方法中获取不到这个变量的错误,该成全局的就获取到了。)

1 SharedPreferences sp = getSharedPreferences("存储xml文件的名字",MODE_PRIVATE);

获得数据的方法:  

1 String msg = sp.getString("存储的key","如果没保存则会获得的数据");

msg就是你保存的数据,如果没有保存,那么获得就是你后面设置的默认数据  
对其编辑的方法:  

1 Editor editor = sp.edit();
2 editor.putString(key, value);
3 editor.commit();//一定不要忘记提交,否则就保存不到文件中。

如果希望配置信息对其他应用开放, 在设置权限时,可使用  MODE_WORLD_READABLE, 其他应用要获得该配置信息时,必须先获取相应的上下文:  

1 context =createPackageContext("全包名",Context_CONTEXT_IGNORE_SECURITY);
2 SharedPreferences sp = context.getSharedPreferences("存储xml文件的名字",MODE_PRIVATE);

在实际开发中,一定要对获得context进行是否为null的判断,有些时候我们打不开,或因权限不足,或因为应用已经被用户删除。   
需要说明的是,在PreferenceActivity中内置了对SharedPreferences的支持。如果希望进一步了解的用户可以查看一下类似ListPreference的用法。  
其次Android还提供了内部存储方式, 开发者可以将数据存储在应用的私有空间中,避免其他程序访问。其权限在Context下,有: MODE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE 等。内部  存储所在的目录为:/date/date/包.名/files   
写入数据可读数据 也很简单:  

1 FileOutputStream fos = context.openFileOutput(file,Context_MODE_WORLD_WRITEABLE);
2 fos.write(bytes);
3 fos.close();
4  
5 FileInputStream fis = context.openFileInput("fileName");

接下来跟平常文件一样读入 就ok了。

 

Android获取文件夹路径 /data/data/

首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。

一、 files
1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。www.2cto.com
3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
4. Context.deleteFile(String),删除files下指定名称的文件。

二、cache
1. Context.getCacheDir(),该方法返回/data/data/youPackageName/cache的File对象。

三、custom dir
getDir(String name, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/3544141.html ,如需转载请自行联系原作者


相关文章
|
12月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
339 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1639 83
|
12月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
980 19
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
1386 1
|
12月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2751 2
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
存储 数据库 Android开发
安卓Jetpack Compose+Kotlin,支持从本地添加音频文件到播放列表,支持删除,使用ExoPlayer播放音乐
为了在UI界面添加用于添加和删除本地音乐文件的按钮,以及相关的播放功能,你需要实现以下几个步骤: 1. **集成用户选择本地音乐**:允许用户从设备中选择音乐文件。 2. **创建UI按钮**:在界面中创建添加和删除按钮。 3. **数据库功能**:使用Room数据库来存储音频文件信息。 4. **更新ViewModel**:处理添加、删除和播放音频文件的逻辑。 5. **UI实现**:在UI层支持添加、删除音乐以及播放功能。
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
765 1
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
810 1
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
1111 0