|
Android 私有文件夾 文件的寫入與讀取 在介紹如何在Android平臺(tái)下進(jìn)行文件的讀取之前,有必要了解Android平臺(tái)下的數(shù)據(jù)存儲(chǔ)規(guī)則。在其他的操作系統(tǒng)如Windows 平臺(tái)下,應(yīng)用程序可以自由地或者在特定的訪問權(quán)限基礎(chǔ)上訪問或修改其他應(yīng)用程序名下的文件等資源,而在Android平臺(tái)下,一個(gè)應(yīng)用程序中所有的數(shù)據(jù)都是私有的。 當(dāng)應(yīng)用程序被安裝到系統(tǒng)中后,其所在的包會(huì)有一個(gè)文件夾用于存放自己的數(shù)據(jù),只有這個(gè)應(yīng)用程序才有對(duì)這個(gè)文件夾的寫入權(quán)限,這個(gè)私有的文件夾位于 Android系統(tǒng)的/data/data/<應(yīng)用程序包名>目錄下,其他的應(yīng)用程序都無法再這個(gè)文件夾中寫入數(shù)據(jù)。除了存放私有的數(shù)據(jù)文件夾外,應(yīng)用程序也具有SD卡的寫入權(quán)限。 使用文件I/O 方法可以直接往手機(jī)中存儲(chǔ)數(shù)據(jù),默認(rèn)情況下這些文件不可以被其他的應(yīng)用程序訪問。Android平臺(tái)支持 java平臺(tái)下的 文件I/O操作, 主要使用FileInputStream 和 FileOutputStream 這兩個(gè)類來實(shí)現(xiàn)文件的存儲(chǔ)與讀取。獲取這兩個(gè)類對(duì)象的方式有兩種。 一:第一種方式就是像Java平臺(tái)下的實(shí)現(xiàn)方式一樣通過構(gòu)造器直接創(chuàng)建,如果需要向打開的文件末尾寫入數(shù)據(jù),可以通過使用構(gòu)造器 FileOutputStream(File file, boolean append)將 append設(shè)置為true來實(shí)現(xiàn)。不過需要注意的是采用這種方式獲得FileOutputStream 對(duì)象時(shí)如果文件不存在或不可寫入時(shí),會(huì)拋出 FileNotFoundException 異常。 二:第二種獲取 FileInputStream 和 FileOutputStream 對(duì)象的方式是調(diào)用 Context.openFileInput 和 Context.openFileOutput兩個(gè)方法來創(chuàng)建。除了這兩個(gè)方法外,Context對(duì)象還提供了其他幾個(gè)用于對(duì)文件操作的方法,如下所示 Context對(duì)象中文操作的API及說明 方法名 說明 openFileInput(String filename) 打開應(yīng)用程序私有目錄下的的指定私有文件以讀入數(shù)據(jù),返回一個(gè)FileInputStream 對(duì)象 openFileOutput 打開應(yīng)用程序私有目錄下的的指定私有文件以寫入數(shù)據(jù),返回一個(gè)FileOutputStream 對(duì)象,如果文件不存在就創(chuàng)建這個(gè)文件。 fileList() 搜索應(yīng)用程序私有文件夾下的私有文件,返回所有文件名的String數(shù)組 deleteFile(String fileName) 刪除指定文件名的文件,成功返回true,失敗返回false 在使用openFileOutput方法打開文件以寫入數(shù)據(jù)時(shí),需要指定打開模式。默認(rèn)為零,即MODE_PRIVATE。不同的模式對(duì)應(yīng)的的含義如下:
接上頁 openFileOutput方法打開文件時(shí)的模式 常量 含義 MODE_PRIVATE 默認(rèn)模式,文件只可以被調(diào)用該方法的應(yīng)用程序訪問 MODE_APPEND 如果文件已存在就向該文件的末尾繼續(xù)寫入數(shù)據(jù),而不是覆蓋原來的數(shù)據(jù)。 MODE_WORLD_READABLE 賦予所有的應(yīng)用程序?qū)υ撐募x的權(quán)限。 MODE_WORLD_WRITEABLE 賦予所有的應(yīng)用程序?qū)υ撐募懙臋?quán)限。 下面通過一個(gè)小例子來說明Android平臺(tái)下的文件I/O 操作方式,主要功能是在應(yīng)用程序私有的數(shù)據(jù)文件夾下創(chuàng)建一個(gè)文件并讀取其中的數(shù)據(jù)顯示到屏幕的 TextView中,這個(gè)例子也比較簡單只有一個(gè)類。 先看一下運(yùn)行后的效果吧。
Activity01 Java代碼 package xiaohang.zhimeng; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.http.util.EncodingUtils; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class Activity01 extends Activity{ //常量,為編碼格式 public static final String ENCODING = "UTF-8"; //定義文件的名稱 String fileName = "test.txt"; //寫入和讀出的數(shù)據(jù)信息 String message = "歡迎大家來我們?nèi)豪镉懻搯栴}"; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); writeFileData(fileName, message); String result = readFileData(fileName); textView = (TextView)findViewById(R.id.tv); textView.setTextColor(Color.GREEN); textView.setTextSize(20.0f); textView.setText(result); } //向指定的文件中寫入指定的數(shù)據(jù) public void writeFileData(String filename, String message){
接上頁 try { FileOutputStream fout = openFileOutput(filename, MODE_PRIVATE);//獲得FileOutputStream //將要寫入的字符串轉(zhuǎn)換為byte數(shù)組 byte[] bytes = message.getBytes(); fout.write(bytes);//將byte數(shù)組寫入文件 fout.close();//關(guān)閉文件輸出流 } catch (Exception e) { e.printStackTrace(); } } //打開指定文件,讀取其數(shù)據(jù),返回字符串對(duì)象 public String readFileData(String fileName){ String result=""; try { FileInputStream fin = openFileInput(fileName); //獲取文件長度 int lenght = fin.available(); byte[] buffer = new byte[lenght]; fin.read(buffer); //將byte數(shù)組轉(zhuǎn)換成指定格式的字符串
result = EncodingUtils.getString(buffer, ENCODING); } catch (Exception e) { e.printStackTrace(); } return result; } } package xiaohang.zhimeng; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.http.util.EncodingUtils; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class Activity01 extends Activity{ //常量,為編碼格式 public static final String ENCODING = "UTF-8"; //定義文件的名稱 String fileName = "test.txt"; //寫入和讀出的數(shù)據(jù)信息 String message = "歡迎大家來我們?nèi)豪镉懻搯栴}"; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); writeFileData(fileName, message); String result = readFileData(fileName); textView = (TextView)findViewById(R.id.tv);
接上頁 textView.setTextColor(Color.GREEN); textView.setTextSize(20.0f); textView.setText(result); } //向指定的文件中寫入指定的數(shù)據(jù) public void writeFileData(String filename, String message){ try { FileOutputStream fout = openFileOutput(filename, MODE_PRIVATE);//獲得FileOutputStream //將要寫入的字符串轉(zhuǎn)換為byte數(shù)組 byte[] bytes = message.getBytes(); fout.write(bytes);//將byte數(shù)組寫入文件 fout.close();//關(guān)閉文件輸出流 } catch (Exception e) { e.printStackTrace(); } } //打開指定文件,讀取其數(shù)據(jù),返回字符串對(duì)象 public String readFileData(String fileName){ String result=""; try { FileInputStream fin = openFileInput(fileName); //獲取文件長度 int lenght = fin.available(); byte[] buffer = new byte[lenght]; fin.read(buffer); //將byte數(shù)組轉(zhuǎn)換成指定格式的字符串 result = EncodingUtils.getString(buffer, ENCODING); } catch (Exception e) { e.printStackTrace(); } return result; } }本篇文章來源于 黑軟基地-中國最大的黑客軟件安全教程下載站!(手機(jī)資訊) 原文鏈接: http://www./mobiwen/html/Mobile_249951.html
|