日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android SDCard操作(文件读写,容量计算)

發(fā)布時(shí)間:2025/7/14 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android SDCard操作(文件读写,容量计算) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android SDCard操作(文件讀寫,容量計(jì)算)

android.os.Environment

提供訪問環(huán)境變量??

java.lang.Object

android.os.Environment?

?

Environment?靜態(tài)方法:

??方法 :?getDataDirectory?()

返回 :?File?

解釋 : 返回Data的目錄?

?

方法 :?getDownloadCacheDirectory?()

返回 :?File

解釋 : 返回下載緩沖區(qū)目錄

方法 :?getExternalStorageDirectory?()

返回 :?File

解釋 : 返回?cái)U(kuò)展存儲(chǔ)區(qū)目錄(SDCard)


方法 :?getExternalStoragePublicDirectory?(String?type)

返回 :?File

解釋 : 返回一個(gè)高端的公用的外部存儲(chǔ)器目錄來擺放某些類型的文件(來自網(wǎng)上)?

方法 :?getRootDirectory?()

返回 :?File

解釋 : 返回Android的根目錄

方法 :?getExternalStorageState?()

返回 :?String

解釋 : 返回外部存儲(chǔ)設(shè)備的當(dāng)前狀態(tài)??

?

?

getExternalStorageState?() 返回的狀態(tài)String?類型常量 :

常量 :?MEDIA_BAD_REMOVAL

值??? : "bad_removal"

解釋 : 在沒有正確卸載SDCard之前移除了?

常量 : MEDIA_CHECKING

值??? : "checking"

解釋 : 正在磁盤檢查

?

常量 :?MEDIA_MOUNTED

值??? : "mounted"

解釋 : 已經(jīng)掛載并且擁有可讀可寫權(quán)限

?

常量 :?MEDIA_MOUNTED_READ_ONLY

值??? : "mounted_ro"

解釋 : 已經(jīng)掛載,但只擁有可讀權(quán)限

?

常量 : MEDIA_NOFS

值??? : "nofs"

解釋 : 對(duì)象空白,或者文件系統(tǒng)不支持

?

常量 :?MEDIA_REMOVED

值??? : "removed"

解釋 : 已經(jīng)移除擴(kuò)展設(shè)備

?

常量 :?MEDIA_SHARED

值??? : "shared"

解釋 : 如果SDCard未掛載,并通過USB大容量存儲(chǔ)共享

?

常量 :?MEDIA_UNMOUNTABLE

值??? : "unmountable"

解釋 : 不可以掛載任何擴(kuò)展設(shè)備

?

常量 :?MEDIA_UNMOUNTED

值??? : "unmounted"

解釋 : 已經(jīng)卸載

使用時(shí)只需先判斷SDCard當(dāng)前的狀態(tài)然后取得SdCard的目錄即可(見源代碼)

---------------------------------------------------------------------------------------------------------

  • //SDcard?操作??
  • ublic?void?SDCardTest()?{??
  • //?獲取擴(kuò)展SD卡設(shè)備狀態(tài)??
  • String?sDStateString?=?android.os.Environment.getExternalStorageState();??
  • ??
  • //?擁有可讀可寫權(quán)限??
  • if?(sDStateString.equals(android.os.Environment.MEDIA_MOUNTED))?{??
  • ??
  • ????try?{??
  • ??
  • ????????//?獲取擴(kuò)展存儲(chǔ)設(shè)備的文件目錄??
  • ????????File?SDFile?=?android.os.Environment??
  • ????????????????.getExternalStorageDirectory();??
  • ??
  • ????????//?打開文件??
  • ????????File?myFile?=?new?File(SDFile.getAbsolutePath()??
  • ????????????????+?File.separator?+?"MyFile.txt");??
  • ??
  • ????????//?判斷是否存在,不存在則創(chuàng)建??
  • ????????if?(!myFile.exists())?{??
  • ????????????myFile.createNewFile();??
  • ????????}??
  • ??
  • ????????//?寫數(shù)據(jù)??
  • ????????String?szOutText?=?"Hello,?World!";??
  • ????????FileOutputStream?outputStream?=?new?FileOutputStream(myFile);??
  • ????????outputStream.write(szOutText.getBytes());??
  • ????????outputStream.close();??
  • ??
  • ????}?catch?(Exception?e)?{??
  • ????????//?TODO:?handle?exception??
  • ????}//?end?of?try??
  • ??
  • }//?end?of?if(MEDIA_MOUNTED)??
  • //?擁有只讀權(quán)限??
  • else?if?(sDStateString??
  • ????????.endsWith(android.os.Environment.MEDIA_MOUNTED_READ_ONLY))?{??
  • ??
  • ????//?獲取擴(kuò)展存儲(chǔ)設(shè)備的文件目錄??
  • ????File?SDFile?=?android.os.Environment.getExternalStorageDirectory();??
  • ??
  • ????//?創(chuàng)建一個(gè)文件??
  • ????File?myFile?=?new?File(SDFile.getAbsolutePath()?+?File.separator??
  • ????????????+?"MyFile.txt");??
  • ??
  • ????//?判斷文件是否存在??
  • ????if?(myFile.exists())?{??
  • ????????try?{??
  • ??
  • ????????????//?讀數(shù)據(jù)??
  • ????????????FileInputStream?inputStream?=?new?FileInputStream(myFile);??
  • ????????????byte[]?buffer?=?new?byte[1024];??
  • ????????????inputStream.read(buffer);??
  • ????????????inputStream.close();??
  • ??
  • ????????}?catch?(Exception?e)?{??
  • ????????????//?TODO:?handle?exception??
  • ????????}//?end?of?try??
  • ????}//?end?of?if(myFile)??
  • }//?end?of?if(MEDIA_MOUNTED_READ_ONLY)??
  • //?end?of?func??
  • 計(jì)算SDCard的容量大小

    android.os.StatFs

    一個(gè)模擬linux的df命令的一個(gè)類,獲得SD卡和手機(jī)內(nèi)存的使用情況??

    java.lang.Object

    android.os.StatFs

    ?

    構(gòu)造方法:

    StatFs?(String?path)

    ?

    公用方法:?

    方法 :?getAvailableBlocks?()

    返回 : int

    解釋 :返回文件系統(tǒng)上剩下的可供程序使用的塊

    ?

    方法 :?getBlockCount?()

    返回 : int

    解釋 : 返回文件系統(tǒng)上總共的塊

    ?

    方法 :?getBlockSize?()

    返回 : int

    解釋 : 返回文件系統(tǒng) 一個(gè)塊的大小單位byte

    ?

    方法 :?getFreeBlocks?()

    返回 : int

    解釋 : 返回文件系統(tǒng)上剩余的所有塊 包括預(yù)留的一般程序無法訪問的

    ?

    方法 :?restat?(String?path)

    返回 : void

    解釋 : 執(zhí)行一個(gè)由該對(duì)象所引用的文件系統(tǒng)雷斯塔特.(Google翻譯)


    想計(jì)算SDCard大小和使用情況時(shí), 只需要得到SD卡總共擁有的Block數(shù)或是剩余沒用的Block數(shù),再乘以每個(gè)Block的大小就是相應(yīng)的容量大小了單位byte.(見代碼)??

    Java代碼?
  • ????public?void?SDCardSizeTest()?{??
  • ??
  • //?取得SDCard當(dāng)前的狀態(tài)??
  • String?sDcString?=?android.os.Environment.getExternalStorageState();??
  • ??
  • if?(sDcString.equals(android.os.Environment.MEDIA_MOUNTED))?{??
  • ??
  • ????//?取得sdcard文件路徑??
  • ????File?pathFile?=?android.os.Environment??
  • ????????????.getExternalStorageDirectory();??
  • ??
  • ????android.os.StatFs?statfs?=?new?android.os.StatFs(pathFile.getPath());??
  • ??
  • ????//?獲取SDCard上BLOCK總數(shù)??
  • ????long?nTotalBlocks?=?statfs.getBlockCount();??
  • ??
  • ????//?獲取SDCard上每個(gè)block的SIZE??
  • ????long?nBlocSize?=?statfs.getBlockSize();??
  • ??
  • ????//?獲取可供程序使用的Block的數(shù)量??
  • ????long?nAvailaBlock?=?statfs.getAvailableBlocks();??
  • ??
  • ????//?獲取剩下的所有Block的數(shù)量(包括預(yù)留的一般程序無法使用的塊)??
  • ????long?nFreeBlock?=?statfs.getFreeBlocks();??
  • ??
  • ????//?計(jì)算SDCard?總?cè)萘看笮B??
  • ????long?nSDTotalSize?=?nTotalBlocks?*?nBlocSize?/?1024?/?1024;??
  • ??
  • ????//?計(jì)算?SDCard?剩余大小MB??
  • ????long?nSDFreeSize?=?nAvailaBlock?*?nBlocSize?/?1024?/?1024;??
  • }//?end?of?if??
  • //?end?of?func??
  • 總結(jié)

    以上是生活随笔為你收集整理的Android SDCard操作(文件读写,容量计算)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。