原文: http://www.cnblogs.com/jiezzy/archive/2012/04/21/2462191.html
注:在Activity中有getFileDir()和getCacheDir();方法可以獲得當前的手機自帶的存儲空間中的當前包文件的路徑
getFileDir() ----- /data/data/cn.xxx.xxx (當前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(當前包)/cache
getFileDir() ----- /data/data/cn.xxx.xxx (當前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(當前包)/cache
- 1 .編寫文件讀取與寫入功能實現類FileService
- package cn.android.service;
- import java.io.ByteArrayOutputStream;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import android.content.Context;
- import android.util.Log;
- /**
- * 文件保存與讀取功能實現類
- * @author Administrator
- *
- * 2010-6-28 下午08:15:18
- */
- public class FileService {
- public static final String TAG = "FileService" ;
- private Context context;
- //得到傳入的上下文對象的引用
- public FileService(Context context) {
- this .context = context;
- }
- /**
- * 保存文件
- *
- * @param fileName 文件名
- * @param content 文件內容
- * @throws Exception
- */
- public void save(String fileName, String content) throws Exception {
- // 由於頁面輸入的都是文本信息,所以當文件名不是以.txt後綴名結尾時,自動加上.txt後綴
- if (!fileName.endsWith( ".txt" )) {
- fileName = fileName + ".txt" ;
- }
- byte [] buf = fileName.getBytes( "iso8859-1" );
- Log.e(TAG, new String(buf, "utf-8" ));
- fileName = new String(buf, "utf-8" );
- Log.e(TAG, fileName);
- // Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
- // Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
- // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件。
- // MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
- // 如果希望文件被其他應用讀和寫,可以傳入:
- // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
- FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE);
- fos.write(content.getBytes());
- fos.close();
- }
- /**
- * 讀取文件內容
- *
- * @param fileName 文件名
- * @return 文件內容
- * @throws Exception
- */
- public String read(String fileName) throws Exception {
- // 由於頁面輸入的都是文本信息,所以當文件名不是以.txt後綴名結尾時,自動加上.txt後綴
- if (!fileName.endsWith( ".txt" )) {
- fileName = fileName + ".txt" ;
- }
- FileInputStream fis = context.openFileInput(fileName);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte [] buf = new byte [ 1024 ];
- int len = 0 ;
- //將讀取後的數據放置在內存中---ByteArrayOutputStream
- while ((len = fis.read(buf)) != - 1 ) {
- baos.write(buf, 0 , len);
- }
- fis.close();
- baos.close();
- //返回內存中存儲的數據
- return baos.toString();
- }
- }
- 2 .編寫Activity類:
- package cn.android.test;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- import cn.android.service.FileService;
- public class TestAndroidActivity extends Activity {
- /** Called when the activity is first created. */
- //得到FileService對象
- private FileService fileService = new FileService( this );
- //定義視圖中的filename輸入框對象
- private EditText fileNameText;
- //定義視圖中的contentText輸入框對象
- private EditText contentText;
- //定義一個土司提示對象
- private Toast toast;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //得到視圖中的兩個輸入框和兩個按鈕的對象引用
- Button button = (Button) this .findViewById(R.id.button);
- Button read = (Button) this .findViewById(R.id.read);
- fileNameText = (EditText) this .findViewById(R.id.filename);
- contentText = (EditText) this .findViewById(R.id.content);
- //為保存按鈕添加保存事件
- button.setOnClickListener( new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String fileName = fileNameText.getText().toString();
- String content = contentText.getText().toString();
- //當文件名為空的時候,提示用戶文件名為空,並記錄日誌。
- if (isEmpty(fileName)) {
- toast = Toast.makeText(TestAndroidActivity. this , R.string.empty_filename, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.w(fileService.TAG, "The file name is empty" );
- return ;
- }
- //當文件內容為空的時候,提示用戶文件內容為空,並記錄日誌。
- if (isEmpty(content)) {
- toast = Toast.makeText(TestAndroidActivity. this , R.string.empty_content, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.w(fileService.TAG, "The file content is empty" );
- return ;
- }
- //當文件名和內容都不為空的時候,調用fileService的save方法
- //當成功執行的時候,提示用戶保存成功,並記錄日誌
- //當出現異常的時候,提示用戶保存失敗,並記錄日誌
- try {
- fileService.save(fileName, content);
- toast = Toast.makeText(TestAndroidActivity. this , R.string.success, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.i(fileService.TAG, "The file save successful" );
- } catch (Exception e) {
- toast = Toast.makeText(TestAndroidActivity. this , R.string.fail, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.e(fileService.TAG, "The file save failed" );
- }
- }
- });
- //為讀取按鈕添加讀取事件
- read.setOnClickListener( new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //得到文件名輸入框中的值
- String fileName = fileNameText.getText().toString();
- //如果文件名為空,則提示用戶輸入文件名,並記錄日誌
- if (isEmpty(fileName)) {
- toast = Toast.makeText(TestAndroidActivity. this , R.string.empty_filename, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.w(fileService.TAG, "The file name is empty" );
- return ;
- }
- //調用fileService的read方法,並將讀取出來的內容放入到文本內容輸入框裡面
- //如果成功執行,提示用戶讀取成功,並記錄日誌。
- //如果出現異常信息(例:文件不存在),提示用戶讀取失敗,並記錄日誌。
- try {
- contentText.setText(fileService.read(fileName));
- toast = Toast.makeText(TestAndroidActivity. this , R.string.read_success, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.i(fileService.TAG, "The file read successful" );
- } catch (Exception e) {
- toast = Toast.makeText(TestAndroidActivity. this , R.string.read_fail, Toast.LENGTH_LONG);
- toast.setMargin(RESULT_CANCELED, 0 .345f);
- toast.show();
- Log.e(fileService.TAG, "The file read failed" );
- }
- }
- });
- }
- //編寫一個isEmpty方法,判斷字符串是否為空
- private boolean isEmpty(String s) {
- if (s == null || "" .equals(s.trim())) {
- return true ;
- }
- return false ;
- }
- }