AndroidDay02-文件操作-登陆示例-创新互联

需求:登陆

为凉城等地区用户提供了全套网页设计制作服务,及凉城网站建设行业解决方案。主营业务为成都网站建设、成都网站设计、凉城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

第1步:搭建UI

采用混合布局,布局搭建好之后如下所示:

Android Day02-文件操作-登陆示例

第2步:准备工作

根据javaWeb中的mvc+dao的开发模式,创建好包名和类。

Android Day02-文件操作-登陆示例

第3步:业务逻辑

就是一个存值和取值的过程,也可以说是读写文件的过程。

注意在获取路径的时候,不要使用硬性编码(hardcode)。

关键知识点梳理:

   Android Day02-文件操作-登陆示例 

▇获取应用程序的files私有目录:"/data/data/应用程序包名/files"

     方式1:得路径,再得到流。

File context.getFilesDir()

 <--  补充一下 File context.getCacheDir()    表示得到缓存目录/caches-->

方式2:直接得到流

       文件读取流:InputStream in = context.openFileInput("文件名(带后缀)");        

       文件写入流:OutputStream out  = context.openFileOutput("user.txt",                                    Context.MODE_PRIVATE);//有2个参数,第2个参数

       表示文件的权限。

        

▇获取设备的SD卡目录:

→1.注意要配置sd的访问权限。

Android Day02-文件操作-登陆示例

→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来获得外部设备外部存储的信息:

Android Day02-文件操作-登陆示例

▇获取资产文件夹Asset目录下的文件输入流:

//获取上下文的所有资源对象
Resources res = context.getResources();
//从资源对象中获取资产目录Asset的管理器AssetManager
AssetManager manager = res.getAssets();
//利用管理器的open方法获取它的目录下指定文件的读取流
InputStream in = manager.open("user.txt");

另外一种实现方式:

mContext.getAssets().open("sdk.properties")

▇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_editor.commit();

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导出       

https://blog.csdn.net/kangweijian/article/details/86694670  

Android 开发时如何正确获取使用扩展存储路径

http://http://my.oschina.net/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:https://blog.csdn.net/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;
            }
        }

    }

}

在清单里注册监听:

    
        
            
            
            
        
    

其实这个路径,搞内核的人肯定知道。无论sd卡是否存在,这个路径都会一直存在。可以将上面u盘获取路径写死即可。对于我们的项目,U盘的路径就是 "/mnt/media_rw/usb_otg",但是用多媒体相关的API

Cursor 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-C662"这样的串,截取出来,即可根据这个路径去过滤文件。

Android保存文件到本地后连接电脑无法查看 刷新不出来的结局办法

https://blog.csdn.net/anyixiaodi/article/details/53607123

Windows上TF卡格式化后,android系统无法识别的问题

在window上格式化TF卡,会让选格式化的格式:

    Android Day02-文件操作-登陆示例

一般android系统不支持exfat32格式的类型,超过32G假如电脑提示格式化,不要格式化,直接插入机器里面格式化才行,windows格式化后是无法使用的,这是windows的限制

  • 文件夹操作

https://blog.csdn.net/javasxl/article/details/71524831   (注意重命名文件,需要新文件的父路径与旧文件的父路径一致)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站标题:AndroidDay02-文件操作-登陆示例-创新互联
浏览路径:http://scyanting.com/article/pjjsh.html