




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】AndroidDay02-文件操作-登陆示例
需求:登陆第1步:搭建UI
采用混合布局,布局搭建好之后如下所示:
第2步:准备工作
根据javaWeb中的mvc+dao的开发模式,创建好包名和类。
第3步:业务逻辑
就是一个存值和取值的过程,也可以说是读写文件的过程。
注意在获取路径的时候,不要使用硬性编码(hardcode)。关键知识点梳理:
▇获取应用程序的files私有目录:"/data/data/应用程序包名/files"
方式1:得路径,再得到流。
File
context.getFilesDir()
<--
补充一下File
context.getCacheDir()
表示得到缓存目录/caches-->
方式2:直接得到流
文件读取流:InputStreamin=context.openFileInput("文件名(带后缀)");
文件写入流:OutputStreamout
=context.openFileOutput("user.txt",
Context.MODE_PRIVATE);//有2个参数,第2个参数
表示文件的权限。
▇获取设备的SD卡目录:
→1.注意要配置sd的访问权限。
→2.判断sd卡的状态。
String
storageState
=
Environment.getExternalStorageState();
if(!storageState.equals(Environment.MEDIA_MOUNTED))
{
//如果挂起,提示用户sd卡不存在。
Toast.makeText(mainContext,
"sd卡不存在",
Toast.LENGTH_SHORT).show();
return;
}
→3.判断sd卡空间容量信息。
//假如SD卡小于200M就提示内存不足
//首先获取外部存储的目录
File对象
File
file_storage
=
Environment.getExternalStorageDirectory();
//通过File对象来获得外部存储的可用空间
Long
useable_storage
=
file_storage.getUsableSpace();
//将字节转换成易于阅读的M表示方法
String
useable_storage_mstr
=
Formatter.formatFileSize(mainContext,useable_storage);
//得到外部存储的总空间
Long
total_storage
=
file_storage.getTotalSpace();
String
total_storage_mstr
=
Formatter.formatFileSize(mainContext,
total_storage);
if(useable_storage
<
1024*1024*200)
{
Toast.makeText(mainContext,
"外部存储空间不足,剩余可用空间为:"
+
useable_storage_mstr
+"M"
+
",总空间为:"
+
total_storage_mstr
+
"M"
,
Toast.LENGTH_LONG).show();
return;
}
通过linux命令df/sdcard来获得外部设备外部存储的信息:
▇获取资产文件夹Asset目录下的文件输入流:
//获取上下文的所有资源对象
Resources
res
=
context.getResources();
//从资源对象中获取资产目录Asset的管理器AssetManager
AssetManager
manager
=
res.getAssets();
//利用管理器的open方法获取它的目录下指定文件的读取流
InputStream
in
=
manager.open("user.txt");
另外一种实现方式:mContext.getAssets().open("perties")
▇Preferences:"/data/data/应用程序包名/shared_prefs"
用于存放一些简单的标记信息、设置信息。通过xml文件在实现保存和取出。
PreferenceManager.getDefaultSharedPreferences此方法获取的xml为“应用程序包名_preferences.xml"文件。
Preferences存储文件流程//第1步:通过上下文对象得到SharedPreferences对象
SharedPreferences
user_pref
=
context.getSharedPreferences("user.txt",
Context.MODE_PRIVATE);
//第2步:得到SharedPreferences的Editor对象
Editor
user_editor
=
user_pref.edit();
//第3步:通过Editor向SharedPreferences对象里面设置值,类似map中的键和值
。
user_editor.putString("username",
user.getUsername());
user_editor.putString("password",
user.getPassword());
//第4步:提交Editor
return
user_mit();
Preferences读取文件内容//第1步:通过上下文对象得到SharedPreferences对象
SharedPreferences
user_share
=
context.getSharedPreferences("user.txt",
Context.MODE_PRIVATE);
//第2步:得到share对象的数据
String
username
=
user_share.getString("username",
"用户名找不到");
String
password
=
user_share.getString("password",
"密码找不到");
//上面getString方法的第二个参数为找不到指定键名的时候返回的缺省值。
通过总结可以发现,上面的这些文件读取流,都只能读取当前应用程序的私有目录下的文件流,有局限性。如果要想跨应用读取数据,还是得结合一般IO流。
今天还讲了XML的解析和序列化,和javaWeb中的xml的解析及序列化十分的相似,只是获取解析器和序列器的方式稍有不同,是通过Xml这个类直接获取的。
▇读取properties文件乱码:
properties里是不能直接写中文的,中文需要转码成unicode编码,也就是以\u开头的。
Excel导出
/kangweijian/article/details/86694670
Android开发时如何正确获取使用扩展存储路径
http:///liucundong/blog/314520
作为一个程序员,想必你也很讨厌App在SD卡根目录乱建目录吧,那就从我做起,来遵守Google的这一规定吧。
通过Context.getExternalFilesDir()方法可以获取到SDCard/Android/data/{package_name}/files/,储存一些长时间保存的数据;
通过Context.getExternalCacheDir()方法可以获取到SDCard/Android/data/{package_name}/cache/,储存临时缓存数据;
这两个目录分别对应设置->应用->应用详情里面的”清除数据“与”清除缓存“选项。如何区分U盘和SD卡?
注意不要光通过路径来区分U盘和SD卡
方法1:/qq_37069563/article/details/80271113(后来发现通过userLabel来判断也是不准确的,有的U盘不一定含有U)
方法2:
public
class
UDiskReceiver
extends
BroadcastReceiver{
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
String
action
=
intent.getAction();
if
(action.equals(Intent.ACTION_MEDIA_EJECT))
{
//
Toast.makeText(context,
"SD卡22222已经拔出",
Toast.LENGTH_SHORT).show();
}
else
if
(action.equals(Intent.ACTION_MEDIA_MOUNTED))
{
String
path
=
intent.getDataString().replace("/file:/",
"");
File
file
=
new
File(path);
getUsb(file);
//
Toast.makeText(context,
"SD卡2222222222已经插入
"
+MusicScanUtil.U_PATH
,
Toast.LENGTH_SHORT).show();
}
}
private
void
getUsb(File
usb)
{
String
path3
=
"/mnt/media_rw/";
File
file
=
new
File(path3);
File
files[]
=
file.listFiles();
if(files==null)
{
return;
}
for(File
f:files)
{
if(TextUtils.equals(f.getName(),
usb.getName()))
{
MusicScanUtil.U_PATH
=
usb.getAbsolutePath().replace("/file:/",
"");
return;
}
}
}
}
在清单里注册监听:
<receiver
android:name=".receiver.UDiskReceiver"
>
<intent-filter
android:priority="1001"
>
<action
android:name="ent.action.MEDIA_MOUNTED"
/>
<action
android:name="ent.action.MEDIA_EJECT"
/>
<data
android:scheme="file"
/>
</intent-filter>
</receiver>
其实这个路径,搞内核的人肯定知道。无论sd卡是否存在,这个路径都会一直存在。可以将上面u盘获取路径写死即可。对于我们的项目,U盘的路径就是
"/mnt/media_rw/usb_otg",但是用多媒体相关的APICursor
cursor
=
getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
muiscInfoArray,
null,
null,
null);
查找出来的文件的path,是以“68EE-C662”开头的这样的串,也就是相当于"/mnt/media_rw/usb_otg"一个映射路径。就是这两个路径时怎么一个关系呢????
通过shell指令"ls-l
mnt/media_rw/usb_otg",注意路径最后没有/,会返回包含类似"68EE-C66
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中班安全教育《禁止的事情不能做》教案及课件大纲
- 2025《产品代理合同范本》
- 2025年二房东出租房屋租赁合同模板
- 2025科技公司租赁合同模板
- 2025装饰装修工程劳务总承包合同
- 2025关于商业建筑设计合同
- 2025工程承包合作合同协议
- 玩具管理员课件
- 幼儿园安全教育之乘车安全
- 示例:2025进出口贸易合同(中英文对照)
- 我国区域发展战略 【核心知识精讲精思】 高一地理下学期 (湘教版2019必修第二册)
- 2023年美国AHA心肺复苏指南
- DL-T 2087-2020 火力发电厂热电联产供热技术导则
- GB/T 20840.103-2020互感器第103部分:互感器在电能质量测量中的应用
- (模版1)某标准件厂冷镦车间变电所设计
- 2022Z世代洞察报告QuestMobile
- 大专毕业论文3000字格式12篇
- 部编版语文六年级下册期末总复习
- 初中学生家长会安全教育课件
- 第二部分-CPO-10中央机房优化控制系统
- 2020新版个人征信报告模板
评论
0/150
提交评论