資料儲存(五種方式二)-檔案儲存
檔案儲存
1.SharedPreference只能儲存一些簡單的資料,要想儲存更多型別的資料,需要使用檔案的儲存操作。有兩種形式:
形式一:直接利用Activity提供的檔案操作方法。此類操作的所有檔案路徑只能是“data\data\<packagename>\files\檔名稱”。
形式二:利用Java IO流執行操作。此類操作的檔案可以儲存在任意路徑下,但需要為其操作授權。
利用Activity類操作資料檔案
1.檔案操作的方法只有兩個:一個是進行檔案的輸出(openFileOutputStream(),返回OutputStream),另一個是進行檔案的輸入(openFileInputStream(),返回InputStream),這兩個方法返回的型別都是Java IO流中的位元組操作流物件。
使用openFileInput()和openFileOutput()方法進行寫入/讀取寫入操作時,接收的檔案中不能包含任何的分隔符(\),只能寫檔名稱,而檔名稱會預設儲存在“data\data\<package name>\files\”目錄中。
2.儲存檔案
publicclass FileOperate extends Activity {
private static final String FILENAME ="mldn.txt" ; // 設定檔名稱
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
FileOutputStream output = null ; // 接收檔案輸出物件
try {//設定輸出檔案的名稱,及檔案建立模式
output =super.openFileOutput(FILENAME, Activity.MODE_PRIVATE) ;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
PrintStream out = newPrintStream(output) ; // 輸出方便
out.println("姓名:李華;") ;
out.println("年齡:20;") ;
out.println("地址:天方夜談學院。") ;
out.close() ; // 資源一定要關閉,關閉流
}
}3.讀取檔案:
publicclass FileOperate extends Activity {
private static final String FILENAME ="mldn.txt" ; // 設定檔名稱
private TextView msg = null ; // 文字元件
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView)super.findViewById(R.id.msg) ;
FileInputStream input = null ;
try {
input = super.openFileInput(FILENAME) ; // 取得輸入流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Scanner scan = new Scanner(input) ;
while(scan.hasNext()) {
this.msg.append(scan.next() +"\n") ;
}
scan.close() ;
}
}利用IO流操作檔案
1.以上程式直接將檔案儲存在手機的預設儲存空間,要想把檔案儲存在自定義目錄及sdcard上,可以使用傳統的IO流完成。
2.向sdcard上儲存檔案
publicclass FileOperate extends Activity {
private static final String FILENAME ="/mnt/sdcard/mldndata/mymldn.txt" ; //設定檔名稱
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
File file = new File(FILENAME) ; // 定義要操作的檔案
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs() ; // 建立父資料夾路徑
}
PrintStream out = null;//列印流物件,用於輸出
try {
out = new PrintStream(newFileOutputStream(file));
out.println("天方夜譚學院(MLDN,www.baidu.cn),作者:李華");
} catch (Exception e) {
e.printStackTrace() ;
} finally { // 一定要關閉流
if(out != null) {
out.close() ;
}
}
}
}
由於用到外部裝置(sdcard),所以要為程式配置相應的許可權。
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />3.判斷sdcard是否存在,如果存在則儲存;否則提示不存在,無法儲存。要實現該功能,要使用android.os.Environment類取得目錄的資訊。
publicclass FileOperate extends Activity {
private static final String FILENAME ="mymldn.txt" ; // 設定檔名稱
private static final String DIR ="mldndata" ; // 操作資料夾的名稱
@Override
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
//如果sdcard存在則建立檔案便於接下來的操作 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + DIR +File.separator + FILENAME); // 定義要操作的檔案
if (!file.getParentFile().exists()){
file.getParentFile().mkdirs();// 建立父資料夾路徑
}
PrintStream out = null;//列印流物件用於輸出
try {
out = new PrintStream(newFileOutputStream(file));
out.println("天方夜譚學院(MLDN,www.MLDNJAVA.cn),作者:李華");
} catch (Exception e) {
e.printStackTrace();
} finally { // 一定要關閉流
if (out != null) {
out.close();
}
}
} else {
Toast.makeText(this, "儲存失敗,SD卡不存在!", Toast.LENGTH_LONG).show() ;
}
}
}參考文章:Android開發實戰經典