【Android】【轉】文件保存與讀取

 

原文地址: http://tdq222.iteye.com/blog/701161

注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以獲得當前的手機自帶的存儲空間中的當前包文件的路徑
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;
        }
         
    }
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章