20、從頭學Android之Android的數據存儲--File

在上一節我們介紹了Android的數據存儲之SharedPreferences,我們知道利用SharedPreferences一般存儲的內容是一些key-value鍵值對,而有時候我們卻要存儲的是一些數據內容,這時候我們可以採用文件存儲,在Android系統中,我們可以很方便的利用文件存儲我們想要的內容

Context爲我們提供了以下的幾個方法

方法名稱

描述

FileInputStream openFileInput(String name)

打開應用程序的數據文件夾下的name文件對應的輸入流

FileOutputStream openFileOutput(String name,int mode)

打開應用程序的數據文件夾下的name文件對應的輸出流,並且指定以某種方式打開。

 

第二個方法裏的第二個參數有以下幾種取值:

MODE_PRIVATE:說明該文件只能被當前的應用程序所讀寫

MODE_APPEND:以追加方式打開該文件,應用程序可以向該文件中追加內容。

MODE_WORLD_READABLE:該文件的內容可以被其他的應用程序所讀取

MODE_WORLD_WRITEABLE:該文件的內容可以被其他的應用程序所讀、寫

 

還有一些Context爲我們提供了其他幾個方法用來訪問應用程序的數據文件夾

方法名稱

描述

getDir(String name,int mode)

在應用程序的數據文件下獲取或創建name對應的子目錄

File getFilesDir()

得到該應用程序數據文件夾的絕對路徑

String[] fileList()

等到該應用程序數據文件夾下的全部文件

deleteFile(String name)

刪除該應用程序的數據文件夾下的指定文件

 

文件存儲的位置: /data/data/<package name>/files/

 

關於IO流的一些內容,可以參看我之前寫的一篇博客:

http://blog.csdn.net/jiahui524/article/details/6869524

http://blog.csdn.net/jiahui524/article/details/6869615

 

實例:File的簡單操作

package com.jiahui.filedemo;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class FileDemoActivity extends Activity {

	private Button btnWrite, btnRead, btnGetDir;
	private EditText edtContent;
	private TextView tvResult, tvFileDir;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		edtContent = (EditText) this.findViewById(R.id.edtContent);
		tvResult = (TextView) this.findViewById(R.id.tvResult);
		tvFileDir = (TextView) this.findViewById(R.id.tvFileDir);

		btnWrite = (Button) this.findViewById(R.id.btnWrite);
		btnRead = (Button) this.findViewById(R.id.btnRead);
		btnGetDir = (Button) this.findViewById(R.id.btnGetDir);

		// 寫入數據
		btnWrite.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {

				try {

					String content = edtContent.getText().toString();
					// 以追加方式寫入數據
					OutputStream outputStream = FileDemoActivity.this
							.openFileOutput("test.txt", MODE_APPEND);

					if (content != null) {
						outputStream.write(content.getBytes(), 0,
								content.getBytes().length);
					}

					outputStream.close();
				} catch (Exception e) {

					e.printStackTrace();
				}

			}
		});

		//讀取數據
		btnRead.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				try {
					StringBuilder sb = new StringBuilder();
					InputStream inputStream = FileDemoActivity.this
							.openFileInput("test.txt");

					byte[] buffer = new byte[1024];
					int len = 0;
					while ((len = inputStream.read(buffer)) != -1) {
						sb.append(new String(buffer, 0, len));
					}

					tvResult.setText("讀取結果爲:" + sb.toString());
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});

		//得到相應文件的絕對路徑
		btnGetDir.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				String absolutePath = FileDemoActivity.this.getFileStreamPath(
						"test.txt").getAbsolutePath();
				tvFileDir.setText(absolutePath);
			}
		});

	}
}


 

實現效果:

用File Explorer查看,我們可以看到在相應的包下如下效果:

 

如需轉載引用請註明出處:http://blog.csdn.net/jiahui524

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章