AndroidDay02-文件操作-登陸示例

需求:登陸

創(chuàng)新互聯(lián)專注于麻山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供麻山營銷型網(wǎng)站建設(shè),麻山網(wǎng)站制作、麻山網(wǎng)頁設(shè)計、麻山網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造麻山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供麻山網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

第1步:搭建UI

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

????Android Day02-文件操作-登陸示例

第2步:準(zhǔn)備工作

????根據(jù)javaWeb中的mvc+dao的開發(fā)模式,創(chuàng)建好包名和類。

????Android Day02-文件操作-登陸示例

第3步:業(yè)務(wù)邏輯

????就是一個存值和取值的過程,也可以說是讀寫文件的過程。

????注意在獲取路徑的時候,不要使用硬性編碼(hardcode)。

關(guān)鍵知識點梳理:

???Android Day02-文件操作-登陸示例?

????▇獲取應(yīng)用程序的files私有目錄:"/data/data/應(yīng)用程序包名/files"

? ? ? ? ?方式1:得路徑,再得到流。

????????????File?context.getFilesDir()

? ? ?<-- ?補充一下 File?context.getCacheDir()????表示得到緩存目錄/caches-->

????? ? 方式2:直接得到流

? ? ? ? ? ?文件讀取流:InputStream in = context.openFileInput("文件名(帶后綴)");? ? ????

? ? ? ? ? ?文件寫入流:OutputStream out ?= context.openFileOutput("user.txt", ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Context.MODE_PRIVATE);//有2個參數(shù),第2個參數(shù)

????????????????????????表示文件的權(quán)限。

????????

? ? ? ? ? ??

????▇獲取設(shè)備的SD卡目錄:

????????→1.注意要配置sd的訪問權(quán)限。

????????????Android Day02-文件操作-登陸示例

????????→2.判斷sd卡的狀態(tài)。????

????????????

String?storageState?=?Environment.getExternalStorageState();
if(!storageState.equals(Environment.MEDIA_MOUNTED))
{
????//如果掛起,提示用戶sd卡不存在。
	Toast.makeText(mainContext,?"sd卡不存在",?Toast.LENGTH_SHORT).show();
	return;
}

????????→3.判斷sd卡空間容量信息。

????????

//假如SD卡小于200M就提示內(nèi)存不足
//首先獲取外部存儲的目錄?File對象
	File?file_storage?=?Environment.getExternalStorageDirectory();
//通過File對象來獲得外部存儲的可用空間
	Long?useable_storage?=?file_storage.getUsableSpace();
	//將字節(jié)轉(zhuǎn)換成易于閱讀的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來獲得外部設(shè)備外部存儲的信息:

????????Android Day02-文件操作-登陸示例

?????▇獲取資產(chǎn)文件夾Asset目錄下的文件輸入流:

????????

//獲取上下文的所有資源對象
Resources?res?=?context.getResources();
//從資源對象中獲取資產(chǎn)目錄Asset的管理器AssetManager
AssetManager?manager?=?res.getAssets();
//利用管理器的open方法獲取它的目錄下指定文件的讀取流
InputStream?in?=?manager.open("user.txt");

????????

????????另外一種實現(xiàn)方式:

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

????????

?▇Preferences:"/data/data/應(yīng)用程序包名/shared_prefs"

????? ?用于存放一些簡單的標(biāo)記信息、設(shè)置信息。通過xml文件在實現(xiàn)保存和取出。

??????PreferenceManager.getDefaultSharedPreferences 此方法獲取的xml為“應(yīng)用程序包名_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對象里面設(shè)置值,類似map中的鍵和值?。
	user_editor.putString("username",?user.getUsername());?
	user_editor.putString("password",?user.getPassword());
//第4步:提交Editor
	return?user_editor.commit();

??????Preferences讀取文件內(nèi)容

//第1步:通過上下文對象得到SharedPreferences對象
????????SharedPreferences?user_share?=?context.getSharedPreferences("user.txt",?Context.MODE_PRIVATE);
//第2步:得到share對象的數(shù)據(jù)
	String?username?=?user_share.getString("username",?"用戶名找不到");
	String?password?=?user_share.getString("password",?"密碼找不到");?
	//上面getString方法的第二個參數(shù)為找不到指定鍵名的時候返回的缺省值。

????

????通過總結(jié)可以發(fā)現(xiàn),上面的這些文件讀取流,都只能讀取當(dāng)前應(yīng)用程序的私有目錄下的文件流,有局限性。如果要想跨應(yīng)用讀取數(shù)據(jù),還是得結(jié)合一般IO流。

????今天還講了XML的解析和序列化,和javaWeb中的xml的解析及序列化十分的相似,只是獲取解析器和序列器的方式稍有不同,是通過Xml這個類直接獲取的。

? ? ▇讀取properties文件亂碼:

??????properties里是不能直接寫中文的,中文需要轉(zhuǎn)碼成unicode編碼,也就是以\u開頭的。

?

Excel導(dǎo)出? ? ? ?

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

Android 開發(fā)時如何正確獲取使用擴展存儲路徑

????http://http://my.oschina.net/liucundong/blog/314520

????

????作為一個程序員,想必你也很討厭App在SD卡根目錄亂建目錄吧,那就從我做起,來遵守Google的這一規(guī)定吧。

????通過Context.getExternalFilesDir()方法可以獲取到 SDCard/Android/data/{package_name}/files/ ,儲存一些長時間保存的數(shù)據(jù);

????通過Context.getExternalCacheDir()方法可以獲取到 SDCard/Android/data/{package_name}/cache/,儲存臨時緩存數(shù)據(jù);

????這兩個目錄分別對應(yīng) 設(shè)置->應(yīng)用->應(yīng)用詳情里面的”清除數(shù)據(jù)“與”清除緩存“選項。

如何區(qū)分U盤和SD卡?

????????注意不要光通過路徑來區(qū)分U盤和SD卡

????? ?方法1:https://blog.csdn.net/qq_37069563/article/details/80271113(后來發(fā)現(xiàn)通過userLabel來判斷也是不準(zhǔn)確的,有的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已經(jīng)拔出",?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已經(jīng)插入?"?+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;
????????????}
????????}

????}

}

????????在清單里注冊監(jiān)聽:

????<receiver?android:name=".receiver.UDiskReceiver"
????????>
????????<intent-filter?android:priority="1001"?>
????????????<action?android:name="android.intent.action.MEDIA_MOUNTED"?/>
????????????<action?android:name="android.intent.action.MEDIA_EJECT"?/>
????????????<data?android:scheme="file"?/>
????????</intent-filter>
????</receiver>

????????其實這個路徑,搞內(nèi)核的人肯定知道。無論sd卡是否存在,這個路徑都會一直存在??梢詫⑸厦鎢盤獲取路徑寫死即可。對于我們的項目,U盤的路徑就是?"/mnt/media_rw/usb_otg",但是用多媒體相關(guān)的API

Cursor?cursor?=?getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,??muiscInfoArray,?null,?null,?null);

????????查找出來的文件的path,是以“68EE-C662”開頭的這樣的串,也就是相當(dāng)于"/mnt/media_rw/usb_otg"一個映射路徑。就是這兩個路徑時怎么一個關(guān)系呢????

? ? ? ? 通過shell指令 "ls -l?mnt/media_rw/usb_otg",注意路徑最后沒有/,會返回包含類似"68EE-C662"這樣的串,截取出來,即可根據(jù)這個路徑去過濾文件。

????????

Android保存文件到本地后連接電腦無法查看 刷新不出來的結(jié)局辦法

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

?

Windows上TF卡格式化后,android系統(tǒng)無法識別的問題

????????在window上格式化TF卡,會讓選格式化的格式:

? ? ? ??Android Day02-文件操作-登陸示例

????????一般android系統(tǒng)不支持exfat32格式的類型,超過32G假如電腦提示格式化,不要格式化,直接插入機器里面格式化才行,windows格式化后是無法使用的,這是windows的限制

????????

  • ? 文件夾操作

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

網(wǎng)站名稱:AndroidDay02-文件操作-登陸示例
標(biāo)題來源:http://bm7419.com/article0/igdhoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、小程序開發(fā)、企業(yè)建站、網(wǎng)站內(nèi)鏈、響應(yīng)式網(wǎng)站、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營