Android中的數(shù)據(jù)存儲(chǔ)1課件_第1頁(yè)
Android中的數(shù)據(jù)存儲(chǔ)1課件_第2頁(yè)
Android中的數(shù)據(jù)存儲(chǔ)1課件_第3頁(yè)
Android中的數(shù)據(jù)存儲(chǔ)1課件_第4頁(yè)
Android中的數(shù)據(jù)存儲(chǔ)1課件_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第7章 Android中的數(shù)據(jù)存取主要內(nèi)容數(shù)據(jù)存儲(chǔ)數(shù)據(jù)存儲(chǔ)實(shí)例7.1 文件存儲(chǔ) android是基于java語(yǔ)言的,在java中提供了一套完整的輸入輸出流操作體系,與文件相關(guān)的有FileInputStream,F(xiàn)ileOutputStream等,通過這些類可以非常方便地訪問磁盤上的文件內(nèi)容。同樣的android也支持這種方式來訪問手機(jī)上的文件。Android手機(jī)中的文件有兩個(gè)存儲(chǔ)位置:內(nèi)置存儲(chǔ)空間和外部SD卡,針對(duì)不同位置的文件的存儲(chǔ)的有所不同,下面分別對(duì)它們的操作。7.1.1 手機(jī)內(nèi)置存儲(chǔ)空間文件的存取DiagramContext提供了如下兩個(gè)方法來打開本應(yīng)用程序的數(shù)據(jù)文件夾里的文件IO流。

2、FileInputStream openFileInput(String name):打開應(yīng)用程序的數(shù)據(jù)文件夾下的name文件對(duì)應(yīng)輸入流。FileOutputStream openFileOutput(String name, int mode):打開應(yīng)用程序的數(shù)據(jù)文件夾下的name文件對(duì)應(yīng)輸出流。 第一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/” ,如果文件不存在,Android 會(huì)自動(dòng)創(chuàng)建它。 第二參數(shù)用于指定操作模式,有四種模式。Context.MODE_PRIVATE=0:默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容,如果想把新寫入

3、的內(nèi)容追加到原文件中,可以使用Context.MODE_APPEND 。Context.MODE_APPEND=32768:模式會(huì)檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件; Context.MODE_WORLD_READABLE =1:表示當(dāng)前文件可以被其他應(yīng)用讀?。籆ontext.MODE_WORLD_WRITEABLE =2:表示當(dāng)前文件可以被其他應(yīng)用寫入。7.1.1 手機(jī)內(nèi)置存儲(chǔ)空間文件的存取如果希望文件被其他應(yīng)用讀和寫,可以傳入: Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE 應(yīng)用程序的數(shù)據(jù)文件默認(rèn)

4、保存在/data/data/files目錄下,文件的后綴名隨意。7.1.1 手機(jī)內(nèi)置存儲(chǔ)空間文件的存取在手機(jī)內(nèi)置存儲(chǔ)空間中創(chuàng)建文件、寫入內(nèi)容的一般步驟:(1)調(diào)用openFileOutput()方法,傳入文件的名稱和操作的模式,該方法將會(huì)返回一個(gè)文件輸出流;(2)調(diào)用write()方法,向這個(gè)文件輸出流中寫入內(nèi)容;(3)調(diào)用close()方法,關(guān)閉文件輸出流。讀取手機(jī)內(nèi)置存儲(chǔ)空間中文件的一般步驟:(1)調(diào)用openFileInput()方法,傳入需要讀取數(shù)據(jù)的文件名,該方法將會(huì)返回一個(gè)文件輸入流對(duì)象;(2)調(diào)用read()方法讀取文件的內(nèi)容;(3)調(diào)用close()方法,關(guān)閉文件輸入流。7.1

5、.1 手機(jī)內(nèi)置存儲(chǔ)空間文件的存取 1、當(dāng)我們手機(jī)上不存在該文件時(shí),我們先寫后讀與先讀后寫有區(qū)別嗎?程序會(huì)不會(huì)出錯(cuò)?(具體做法:把手機(jī)上的content.txt文件刪除,然后分別進(jìn)行先寫后讀與先讀后寫操作,觀察效果)。 2、不同操作模式的區(qū)別,當(dāng)我們多次執(zhí)行寫入操作時(shí), 文件里的內(nèi)容是被覆蓋還是不斷的在文件末尾附加新數(shù)據(jù)?(具體做法:修改openFileOutput()方法的第二個(gè)參數(shù))。7.1.1 手機(jī)內(nèi)置存儲(chǔ)空間文件的存取7.1.1 案例 單擊write按鈕,將第一個(gè)文本編輯框(writeText)的內(nèi)容寫入到指定的文件中(content.txt),單擊read按鈕, 從指定的文件中(con

6、tent.txt)讀取數(shù)據(jù)并顯示在第二個(gè)文本框(readText)上。7.1.1 案例程序清單:FileTestreslayoutactivity_main.xml 設(shè)置文本輸入框最少為兩行設(shè)置文本輸入框的提示信息7.1.1 案例 程序清單:FileTestreslayoutactivity_main.xml7.1.1 案例 在MainActivity.java中分別為寫入內(nèi)容和讀取內(nèi)容按鈕添加事件處理.程序清單:FileTestsrcietjxufecnandroidMainActivity.java public class MainActivity extends Activity pr

7、ivate Button read, write;private EditText readText, writeText;private String fileName=content.txt;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); read = (Button) findViewById(R.id.read); write = (Button) findViewById(R.id.wr

8、ite); readText = (EditText) findViewById(R.id.readText); writeText = (EditText) findViewById(R.id.writeText); read.setOnClickListener(new OnClickListener() public void onClick(View v) readText.setText(read(); );設(shè)置保存的文件名獲取讀取內(nèi)容按鈕獲取寫入內(nèi)容按鈕添加事件處理將讀取的內(nèi)容顯示在文本編輯框上7.1.1 案例 write.setOnClickListener(new OnClic

9、kListener() public void onClick(View v) write(writeText.getText().toString(); ); public void write(String content) try FileOutputStream fos = openFileOutput(fileName, Context.MODE_APPEND); 當(dāng)?shù)诙€(gè)參數(shù)為Context.MODE_PRIVATE時(shí),后寫入的內(nèi)容會(huì)覆蓋原有內(nèi)容。PrintStream ps = new PrintStream(fos);ps.print(content); catch (Exce

10、ption e) e.printStackTrace();將文本編輯框的內(nèi)容寫入文件該方法將字符串內(nèi)容寫入文件程序清單:FileTestsrcietjxufecnandroidMainActivity.java7.1.1 案例 public String read() StringBuilder sbBuilder = new StringBuilder(); try FileInputStream is = openFileInput(fileName); byte buffer = new byte64; int hasRead; while (hasRead = is.read(buff

11、er) != -1) sbBuilder.append(new String(buffer, 0, hasRead); catch (Exception e) e.printStackTrace();return sbBuilder.toString(); 程序清單:FileTest/src/iet/jxufe/cn/android/MainActivity.java該方法用于讀取文件信息,并以字符串返回獲取文件輸入流定義緩沖區(qū)的大小記錄每次讀取的字節(jié)數(shù)7.1.2 SD卡文件存取 對(duì)于手機(jī)而言,內(nèi)存非常寶貴,也是比較小的。內(nèi)存空間會(huì)影響到手機(jī)的運(yùn)行速度,通常不建議將數(shù)據(jù)保存到手機(jī)內(nèi)存中,特別是

12、一些比較大的資源如圖片、音頻、視頻等。那么這些資源存放在哪里呢?存放在外存上,幾乎所有的Android設(shè)備,都會(huì)配有外存設(shè)備,最常見的就是SD卡??梢园裇D卡看作是移動(dòng)硬盤或U盤。 讀取SD卡上的文件和讀取手機(jī)上的文件類似,都是通過文件操作流的方式讀取的,Android中沒有提供單獨(dú)的SD卡文件操作類,直接使用Java中的文件操作即可,關(guān)鍵是如何確定文件的位置。因?yàn)镾D卡的可移動(dòng)性,因此,在訪問之前,需要驗(yàn)證手機(jī)的SD卡的狀態(tài)。 要想在模擬器中使用SD卡,首先需要?jiǎng)?chuàng)建一張SD卡(當(dāng)然不是真的SD卡,只是一個(gè)鏡像文件)。創(chuàng)建SD卡可以在Eclipse創(chuàng)建模擬器時(shí)隨同創(chuàng)建,也可以使用Android

13、提供的命令在命令行進(jìn)行創(chuàng)建。 打開命令行窗口進(jìn)入android SDK安裝路徑的tools目錄下,輸入以下命令在D盤創(chuàng)建一張容量為2G的SD卡,文件后綴名可以隨便取,建議使用.img,生成的文件為鏡像文件。如果你在環(huán)境變量中添加了Android tools目錄,則可直接輸入相應(yīng)的命令即可。mksdcard 2048M D:sdcard.img7.1.2 SD卡文件存取讀、寫SD卡上的文件步驟如下: 1、調(diào)用Environment的getExternalStorageState()方法判斷手機(jī)上是否插入了SD卡,并且應(yīng)用程序具有讀寫SD卡的權(quán)限。 Environment.getExternalS

14、torageState()方法用于獲取SDCard的狀態(tài),如果手機(jī)裝有SDCard,并且可以進(jìn)行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。 2、調(diào)用Environment的getExternalStorageDirectory()方法來獲取外部存儲(chǔ)器,也就是SD卡的目錄。 3、使用FileInputStream、FileOutputStream、FileReader、FileWriter讀、寫SD卡里的文件。7.1.2 SD卡文件存取注意: 文件讀取之前,應(yīng)確認(rèn)手機(jī)上已插入SD卡,對(duì)于模擬器來說,可以通過mksdcard命令來創(chuàng)建虛擬存儲(chǔ)卡; 為了讀、寫S

15、D卡上的數(shù)據(jù),必須在應(yīng)用程序的清單文件(AndroidManifest.xml)中添加讀、寫SD卡的權(quán)限。在SDCard中創(chuàng)建與刪除文件權(quán)限 往SDCard寫入數(shù)據(jù)權(quán)限 7.1.2 SD卡文件存取7.1.2 案例 下面仍然以上面的程序?yàn)槔?,只是這次將數(shù)據(jù)寫入到SD卡上的文件,程序界面布局一致,在此不再列出。關(guān)鍵代碼區(qū)別在于,在讀寫之前需先判斷手機(jī)上是否存在SD卡,然后運(yùn)用java的輸入輸出流技術(shù)進(jìn)行讀寫操作,關(guān)鍵代碼如下:public class MainActivity extends Activity private Button read, write;private EditText

16、readText, writeText;private String fileName = content.txt;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);read = (Button) findViewById(R.id.read);write = (Button) findViewById(R.id.write);readText = (EditText) findViewById(R.i

17、d.readText);writeText = (EditText) findViewById(R.id.writeText);read.setOnClickListener(new OnClickListener() public void onClick(View v) readText.setText(read(););程序清單:SDCardFileTestsrcietjxufecnandroidMainActivity.java7.1.2 案例 write.setOnClickListener(new OnClickListener() public void onClick(View

18、 v) write(writeText.getText().toString(); ); public void write(String content) try if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED) File sdCardDir = Environment.getExternalStorageDirectory(); File destFile = new File(sdCardDir.getCanonicalPath()+ File.separator + fileName

19、); System.out.println(*+destFile.getAbsolutePath(); RandomAccessFile raf = new RandomAccessFile(destFile, rw); raf.seek(destFile.length(); raf.write(content.getBytes(); raf.close(); catch (Exception e) e.printStackTrace(); 向文件中寫入內(nèi)容判斷手機(jī)中SD卡狀態(tài)獲取SD卡目錄根據(jù)路徑和文件名創(chuàng)建文件把指針定位到文件末尾在文件末尾追加新的內(nèi)容關(guān)閉文件程序清單:SDCardFile

20、TestsrcietjxufecnandroidMainActivity.java public String read() StringBuilder sbBuilder = new StringBuilder();try if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)File sdCard=Environment.getExternalStorageDirectory();File destFile = new File(sdCard.getCanonicalPath()+ File.separator + fileName);FileInputStream fis=new FileInputStream(destFile);byte

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論