從零開始學android<數據存儲(3)External Storage外部存儲.三十七.>
來源:程序員人生 發布時間:2014-09-17 20:15:46 閱讀次數:2621次
所謂的外部存儲External Storage就是將數據文件保存在SD卡上。
1.但是在保存數據時需要先對SD卡的狀態進行判斷。
使用Environment.getExternalStorageState()可以SD卡的運行狀態
分別有一下的狀態
MEDIA_UNKNOWN
, MEDIA_REMOVED
, MEDIA_UNMOUNTED
, MEDIA_CHECKING
, MEDIA_NOFS
, MEDIA_MOUNTED
, MEDIA_MOUNTED_READ_ONLY
, MEDIA_SHARED
,MEDIA_BAD_REMOVAL
,
or MEDIA_UNMOUNTABLE
.
我們一般使用的是
MEDIA_MOUNTED可操作
2.獲取SD卡的跟目錄
這里可以使用Environment.getExternalStorageDirectory()方法來獲取
3.判斷路徑是否存在,并進行相應操作
使用file.getParentFile().exists()來判斷文件路徑是否存在,如果不存在就創建
file.getParentFile().mkdir();
4.使用outputstream,Writer,printstream等方法進行數據的寫入操作
5.文件的讀取方法同上
XML文件
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="106dp"
android:text="保存SD卡文件" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="讀取SD卡文件" />
</RelativeLayout>
</span>
JAVA文件
<span style="font-size:18px;">package com.example.externalstorage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Scanner;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button saveData, getData;
public static final String FILENAME = "flyou.dat";// 文件名
public static final String FILEDIR = "myFile";// SD卡下的文件路徑
private PrintStream print;// 初始化打印流
private Scanner input;// 初始化輸入流
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 實例化按鈕
saveData = (Button) this.findViewById(R.id.button1);
getData = (Button) this.findViewById(R.id.button2);
// 儲存文件到SD卡
saveData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 獲取sd卡的狀態并判斷是否可用
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// 獲得Sd卡跟目錄
String SDpath = Environment.getExternalStorageDirectory()
.toString();
// 拼湊完整的文件地址
String path = SDpath + File.separator + FILEDIR
+ File.separator + FILENAME;
// System.out.println(path);
// 獲得File對象
File file = new File(path);
// 判斷路徑是否存在入不存在則自動創建
if (!file.getParentFile().exists()) {
file.getParentFile().mkdir();
}
try {
// 使用打印流重定向寫入位置,向文件內寫入數據
print = new PrintStream(file);
print.print("這是使用打印流在SDka上存取的數據文件");
print.println("
第二行數據");// 在文件中默認"
"為換行符
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 關閉打印流
Toast.makeText(MainActivity.this, "文件保存成功,文件位置:"+path, 2).show();
print.close();
}
}
}
});
// 讀取文件
getData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
String SDpath = Environment.getExternalStorageDirectory()
.toString();
String path = SDpath + File.separator + FILEDIR
+ File.separator + FILENAME;
File file = new File(path);
try {
// 創建SCanner重寫輸出地址為文件
input = new Scanner(file);
// 判斷是否有下一行數據
while (input.hasNext()) {
String info = (String) input.next();
// 根據土司顯示讀取到的數據
Toast.makeText(MainActivity.this, info, 2).show();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
input.close();
}
}
}
});
}
}
</span>
最后還必須給android工程配置權限
android.permission.WRITE_EXTERNAL_STORAGE


將文件導出后用記事本打開

NOTE:
如果只進行文件的讀取操作,需要配置android.permission.READ_EXTERNAL_STORAGE
如果同時進行讀取操作則只需進行配置android.permission.WRITE_EXTERNAL_STORAGE就可以了
下節預報:Sqlite數據庫存儲
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈