編輯:關於Android編程
在Android中,數據的存儲分為兩種方式:
1、直接以文件的形式存儲在目錄中
2、以json格式存儲在數據庫中
將數據以文件的存儲又分為兩種方式:
1、生成.txt文件
2、生成xml文件
那麼今天就來詳細的說一下以文件的形式存儲,由於沒有講到數據庫,在之後的課程中會講到json格式存儲在數據庫中。
一、生成.txt文件
文件的生成無非就是我們Java中學習的輸入輸出流中的一部分,有Java基礎相信都是很容易理解的,因為它真的很簡單啦~~
1、生成目錄可以分為兩種:
1)本機
2)SD卡
2、生成.txt文件的方式又可以分為4種
1)使用MODE_PRIVATE模式,生成一個私有的文件
2)使用MODE_PRIVATE模式,生成一個appent文件
3)使用MODE_WORLD_READABLE模式,生成一個readable文件
4)使用MODE_WORLD_WRITEABLE模式,生成一個writeable文件
在生.txt文件之前,我們有必要先了解一下文件的權限,如下圖:

1、第一格:表示文件的類型
2、第2-4格:表示當前用戶擁有的權限
3、第5-7格:表示當前用戶所在組擁有的權限
4、第8-10格:表示其他用戶擁有的權限
5、"r":表示可讀;"w":表示可寫;"x":表示可執行;"-":表示什麼權限也沒有,如果看到"rwx"就表示可讀可寫可執行,其他組合亦是如此
注意:不同的模式生成的文件的權限是不一樣的,以及生成文件的類型的權限也是不一樣的。
那麼下面就詳細的來說一下這幾種方式
1、如圖所示,當我們點擊button按鈕時觸發文件的監聽,這裡的按鈕就是簡單的按鈕,但是要記得設置onclick點擊事件的屬性哦~大家都不傻是吧…………

1)使用MODE_PRIVATE模式,生成一個私有的文件
//點擊按鈕1,使用MODE_PRIVATE模式,生成一個私有的文件
public void click1(View v){
try {
FileOutputStream fos = openFileOutput("private.txt", MODE_PRIVATE);
fos.write("private".getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2)使用MODE_PRIVATE模式,生成一個appent文件
//點擊按鈕2,使用MODE_PRIVATE模式,生成一個appent文件
public void click2(View v){
try {
FileOutputStream fos = openFileOutput("appent.txt", MODE_PRIVATE);
fos.write("appent".getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3)使用MODE_WORLD_READABLE模式,生成一個readable文件
//點擊按鈕3,使用MODE_WORLD_READABLE模式,生成一個readable文件
public void click3(View v){
try {
FileOutputStream fos = openFileOutput("readable.txt", MODE_WORLD_READABLE);
fos.write("readable".getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
4)使用MODE_WORLD_WRITEABLE模式,生成一個writeable文件
//點擊按鈕4,使用MODE_WORLD_WRITEABLE模式,生成一個write文件
public void click4(View v){
try {
FileOutputStream fos = openFileOutput("writeable.txt", MODE_WORLD_WRITEABLE);
fos.write("writeable".getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
部分代碼說明
FileOutputStream: 文件輸出流
openFileOutput("private.txt", MODE_PRIVATE):openFileOutput是Android中封裝好的文件輸出流,private.txt就是生成的文件名,MODE_PRIVATE這個就是上面說到的模式啦!
fos.write("private".getBytes()):write就是寫入什麼內容,這裡的參數就是你要寫入的文本內容,getBytes()………………^_^不知道自己去看Java基礎吧哈哈哈~~~
close():關閉流對象
try-catch:有異常,try一下……
MODE_WORLD_WRITEABLE,MODE_WORLD_READABLE:這兩個模式已經被廢棄了……沒有那麼多為什麼!哈哈哈……
感覺自己萌萌哒……實在不會的就復習Java基礎吧!
那麼這裡就生成了如下圖所示的4個文件

2、將文件存儲在SD卡
1、獲取SD卡的路徑:
String sdPath = Environment.getExternalStorageDirectory().getPath() ;
2、添加路徑
File file = new File(sdPath + "writeable.txt");
然後將路徑寫成這個就好了!就是這麼簡單
3、讀取剛才寫入的文件
在讀取文件內容的時候,你寫入的路徑是什麼,那麼讀的時候路徑就是什麼
try {
//File file = new File("/data/data/com.test.filereadwrite/files/readable.txt");
File file = new File("/data/data/com.test.filereadwrite/files/writeable.txt");
FileInputStream fis = new FileInputStream(file);
BufferedReader bffr = new BufferedReader(new InputStreamReader(fis));
String content = bffr.readLine();
Toast.makeText(MainActivity.this, content, 2000).show();
} catch (Exception e) {
e.printStackTrace();
}
4、路徑優化
大家偶發現了我這裡是直接寫的路徑,那麼這樣寫並不是最優化的,那麼要怎麼才是更優化的呢,那麼久只要改兩行代碼就好啦,例如:
1、獲取路徑:
String path = Context.getFilesDir().getPath();
2、添加路徑:
File file = new File(path + "writeable.txt");
注意:我們寫的路徑都應該是用優化的這種方式,而不應該寫死,在這裡我為了殺雞儆猴哈哈哈~所以就寫死了……但是效果都是一樣的哇~~
二、生成xml文件
生成xml文件又可以分為兩種方式:
1、使用原生StringBuffer拼接xml文件
2、使用Android封裝好的XmlPullParser類
兩種方式生成的xml文件是一樣的,但是個人比較喜歡第二種方式,因為簡單,就是簡單,簡單到Google工程師在開發文檔中都不用寫實例代碼……
在生成xml之前,大家先不要忘記了寫一個實體類,不然你怎麼封裝數據?告訴我怎麼封裝…………
那麼我們這裡就直接上代碼了(實體類自己寫……)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化我們要備份的數據
smsLists = new ArrayList<Sms>();
//插入測試數據
for (int i = 0; i < 10; i++) {
Sms sms = new Sms();
sms.setAddress("10086"+i);
sms.setBody("你好"+i);
sms.setDate("201"+i);
//把sms對象加入到集合中
smsLists.add(sms);
}
}
1、使用原生StringBuffer拼接xml文件
//點擊按鈕button1,通過StringBuffer的方式生成一個xml文件
public void click1(View v){
//1創建一個StringBuffer對象
StringBuffer sb = new StringBuffer();
//開始組拼xml文件頭
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//開始組拼xml根節點
sb.append("<smss>");
//開始組拼sms節點以及子節點
for (Sms sms : smsLists) {
sb.append("<sms>");
//組拼addressa節點
sb.append("<address>");
sb.append(sms.getAddress());
sb.append("</address>");
//組拼body節點
sb.append("<body>");
sb.append(sms.getBody());
sb.append("</body>");
//組拼date節點
sb.append("<date>");
sb.append(sms.getDate());
sb.append("</date>");
sb.append("</sms>");
}
//smss節點結束
sb.append("</smss>");
//把數據保存到SD卡中
try {
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2、使用Android封裝好的XmlPullParser類
//點擊按鈕button2,通過XmlSerializer的方式生成xml文件
public void click2(View v){
try {
//獲取XmlSerializer類的實例 通過xml這個工具類去獲取
XmlSerializer serializer = Xml.newSerializer();
//設置XmlSerializer序列化參數
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos,"utf-8");
//開始寫xml文檔開頭
serializer.startDocument("utf-8", true);
//寫xml的根節點 namespace 命名空間
serializer.startTag(null, "smss");
//遍歷sms節點以及子節點
for (Sms sms : smsLists) {
serializer.startTag(null, "sms");
//組拼addressa節點
serializer.startTag(null, "address");
serializer.text(sms.getAddress());
serializer.endTag(null, "address");
//組拼body節點
serializer.startTag(null, "body");
serializer.text(sms.getBody());
serializer.endTag(null, "body");
//組拼date節點
serializer.startTag(null, "date");
serializer.text(sms.getDate());
serializer.endTag(null, "date");
serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
//結束xml結尾
serializer.endDocument();
//關閉流
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
那麼這裡就生成如下圖的xml文件:

3、讀取xml文件中的數據
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
//顯示數據信息
TextView tv_sms = (TextView) findViewById(R.id.tv_weather);
//通過上下文 獲取資產的管理者
InputStream in = getAssets().open("smss.xml");
//調用我們定義 解析xml的業務方法
List<Sms> smsLists = SmsParser.xmlParser(in);
StringBuffer sb = new StringBuffer();
for (Sms sms : smsLists) {
sb.append(sms.toString());
}
//把數據顯示到TextView上
tv_sms.setText(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
部分代碼說明:
這裡我想教大家自己怎麼去看開發文檔……所以大家自己去看開發文檔吧……哈哈哈~~
ps:這裡我想說明一下,不是我不會,也不是偷懶,而是大家在以後企業開發的時候都是可以查看開發文檔的,而且說實話Android中的東西真的很多很多,要全部記住那簡直太難啦……
所以希望大家都能夠自己學會查看開發文檔……這也算是自己必修的一門課吧~~因為對於小白的我,學會了看文檔就免得很多很多的麻煩,比如突然有一個東東不會……怎麼辦?哈哈哈……
三、總結
1、生成.txt文件的4種方法和步驟
2、生成xml文件的2種方法和步驟
3、讀取.txt文件
4、讀取xml文件
5、將數據存放在本機和SD卡中
6、學會看開發文檔
7、文件權限
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android SoftAp支持 (二)
SoftAp界面開啟流程(讓你的手機支持SoftAp功能) 市面上大多數手機支持SoftAp功能,有少數手機沒有打開SoftAp的界面設置,所以無法開啟此功能(當然有些山
Android仿京東首頁輪播文字(又名垂直跑馬燈)
京東客戶端的輪播文字效果: 本次要實現的只是後面滾動的文字(前面的用ImageView或者TextView實現即可),看一下實現的效果 實
Android項目仿UC浏覽器和360手機衛士消息常駐欄(通知欄)
之前網上看了下自定義消息欄,通知欄,了解到了Notification這個控件,發現UC浏覽器等都是這種類型,今天寫個demo實現下,如圖:其中每個按鈕都有不同的功能,代碼
android產品研發(十)--)不使用靜態變量保存數據
上一篇文章中我們講解了Android中的幾種常見網絡協議:xml,json,protobuf等,以及各自的優缺點,一般而言主要我們的App涉及到了網絡傳輸都會有這方面的內