android寫入文件
1、首先打開設置應用程序。
2、然後在設置列表中,找到並點擊「應用和通知」選項。
3、然後在應用和通知頁面中,點擊「應用許可權」選項。
4、然後在應用許可權頁面中,找到並點擊「文件和媒體」選項。
5、然後在文件和媒體頁面中,找到需要解除訪問限制的android文件夾,並點擊它。
6、最後在文件夾許可權頁面中,將「讀取」和「寫入」許可權都設置為「允許」。
2. android 判斷sdcard是否存在,以及寫入許可權
做android 開發的時候經常涉及到許可權的問題,而我們像sdcard中寫入文件的時候就要判斷是否有許可權,以及sdcard是否存在,判斷sdcard是否存在的許可權:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
</uses-permission
寫入文件到sdcard中:
File f = new File(path);
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))//sd存在並可寫{OutputStreamWriter osw = new OutputStreamWriter(
osw.write(你要輸入的值);}
3. Android開發之如何讀寫文件
【轉】
首先介紹如何存儲數據,顯然,要將數據從應用中輸出到文件中,必須得到一個輸出流outPutStream,然後往輸出流中寫入數據,在這里Android自帶了一個得到應用輸出流的方法
FileOutputStream fos =context.openFileOutput(「yuchao.txt」,Context.MODE_PRIVATE); (1)
其中第一個屬性為文件名,第二個屬性為讀寫模式(有關讀寫模式的說明下面將詳細闡述),
然後在文件輸出流fos中便可以寫入數據
Fos.write(「Hi,」I』m Chao Yu!」.getBytes());
用完文件輸出流之後記得關閉
fos.close();
這樣,在/data/data/packageName/file目錄下就生成了一個文件名為yuchao.txt的文件,文件中的內容為」 Hi,I』m Chao Yu!」
有關(1)中讀寫模式其實就是制定創建文件的許可權以及在讀寫的時候的方式,Android中提供了以下幾種讀寫模式
Context.MODE_PRIVATE = 0
該模式下創建的文件其他應用無權訪問,並且本應用將覆蓋原有的內容
Context.MODE_APPEND = 32768
該模式下創建的文件其他應用無權訪問,並且本應用將在原有的內容後面追加內容
Context.MODE_WORLD_READABLE = 1
該模式下創建的文件其他應用有讀的許可權
Context.MODE_WORLD_WRITEABLE = 2
該模式下創建的文件其他應用有寫的許可權
如果需要將文件設置為外部應用可以讀寫,可將讀寫模式設置為Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE
一般情況下,各個應用維護的數據都在一個特定的文件夾中,即上面所提到的/data/data/packageName/file(存在於手機存儲中),但手機內存畢竟有限,所以有些情況下,我們需要往SD卡中寫入數據文件,這其實和普通的java web 應用步驟一樣,都是先創建特針對特定目錄特定文件的輸出流,然後往輸出流中寫數據,這里要注意一個方法,就是獲取SD卡根目錄的方法,隨著Android系統不斷升級,SD卡的根目錄隨時都有可能改變,Android中得到SD卡根目錄的方法是
File sdCardDir = Environment.getExternalStorageDirectory();
然後就可以進行下面的步驟
File saveFile = new File(sdCardDir, 「yuchao.txt」);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("Hi,I』m ChaoYu".getBytes());
outStream.close();
值得注意的是,在往SD卡中寫數據的時候,健壯的代碼必須考慮SD卡不存在或者防寫的情況,故在寫入之前,先做判斷
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
……
}
接著,我們來學習下我們的應用程序如何讀取文件中的數據,其實就是寫的逆向過程
若要讀取應用程序默認維護的文件(即/data/data/packageName/file目錄下的文件),首先得到文件輸入流
FileInputStream istream = this.context.openFileInput(「yuchao.txt」);
然後在內存中開辟一段緩沖區
byte[] buffer = new byte[1024];
然後創建一個位元組數組輸出流
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
讀出來的數據首先放入緩沖區,滿了之後再寫到字元輸出流中
while((len=istream.read(buffer))!=-1){
ostream.write(buffer, 0, len);
}
最後關閉輸入流和輸出流
istream.close();
ostream.close();
將得到的內容以字元串的形式返回便得到了文件中的內容了,這里的流操作較多,故以一張圖片來說明,見圖1
return new String(ostream.toByteArray());
從SD卡中讀取數據與上述兩個步驟類似,故不再贅述,留給讀者自己思考
如在開發過程中進行SD卡地讀寫,切忌忘了加入許可權
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
至此,Android系統中有關文件數據的讀寫介紹完畢。
4. 關於android創建文件夾的一個問題
Android4.4開始,如果設備有內部機身存儲,那麼SD就成為二級外部存儲,導致不能寫入文件,因為默認只能寫入以及存儲。在Android開發者網站的「外部存儲技術信息」文檔中的描述:"WRITE_EXTERNAL_STORAGE只為設備上的主要外部存儲授予寫許可權,應用程序無法將數據寫入二級外部存儲設備,除非指定了應用程序允許訪問的特定的目錄。「 Google表示,這樣做的目的是,通過這種方式進行限制,系統可以在應用程序被卸載後清除遺留文件。
這目前隻影響雙存儲設備,果你同時使用了機身存儲和SD卡,那麼應用程序將無法在SD卡中創建、修改、刪除數據。
會寫入到如下位置:
解決辦法:1.對Android手機用戶來講,獲得系統的ROOT許可權是一個解決方法。2.對Android開發者來講,可在應用中嵌入一段代碼,其它方式寫入失敗,則將數據寫入二級存儲設備(這段代碼作用是在Android 4.4+設備上):
1:
最後記得增加許可權
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
5. Android中有幾種數據存儲方式,每種方式有哪些特點
Android中有5種數據存儲方式,分別為文件存儲、SQLite資料庫、SharedPreferences、ContentProvider、網路。每種存儲方式的特點如下:
1)文件存儲
文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現I/O的程序是完全一樣的,提供openFileInput()和openFileOutput()方法來讀取設備上的文件。
2)SQLite數春圓據庫
SQLite是Android所集成的一個輕量級的嵌入式資料庫,它不僅可以使用Andorid API操作,同時它也支持SQL語句進行增刪改查等操作。
3)SharedPreferences
SharedPreferences是Android提供的用於存儲一些簡單配置信息慧昌的一種機制,采扒碧塌用了XML格式將數據存儲到設備中。不僅可以在同一個包下使用,還可以訪問其他應用程序的數據,但是由於SharedPreferences的局限性,在實際操作中很少用來讀取其他應用程序的數據。
4)ContentProvider
ContentProvider主要用於不同應用程序之間共享數據,ContentProvider更好的提供了數據共享介面的統一性,使不同應用共享數據更規范和安全。
5)網路存儲數據
通過網路上提供的存儲空間來上傳(存儲)或下載(獲取)我們存儲在網路空間中的數據信息