【Android】【转】文件保存与读取

来源:互联网 发布:好玩的2d网络pc游戏 编辑:程序博客网 时间:2024/05/19 03:22
 

原文地址: 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
 
    packagecn.android.service;
 
    importjava.io.ByteArrayOutputStream;
    importjava.io.FileInputStream;
    importjava.io.FileOutputStream;
 
    importandroid.content.Context;
    importandroid.util.Log;
 
    /**
     * 文件保存与读取功能实现类
     * @author Administrator
     *
     * 2010-6-28 下午08:15:18
     */
    publicclass FileService {
        publicstatic final String TAG = "FileService";
        privateContext context;
 
        //得到传入的上下文对象的引用
        publicFileService(Context context) {
            this.context = context;
        }
 
        /**
         * 保存文件
         *
         * @param fileName 文件名
         * @param content  文件内容
         * @throws Exception
         */
        publicvoid 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
         */
        publicString read(String fileName) throwsException {
 
            // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
            if(!fileName.endsWith(".txt")) {
                fileName = fileName +".txt";
            }
 
            FileInputStream fis = context.openFileInput(fileName);
            ByteArrayOutputStream baos =new ByteArrayOutputStream();
 
            byte[] buf =new byte[1024];
            intlen = 0;
 
            //将读取后的数据放置在内存中---ByteArrayOutputStream
            while((len = fis.read(buf)) != -1) {
                baos.write(buf,0, len);
            }
 
            fis.close();
            baos.close();
 
            //返回内存中存储的数据
            returnbaos.toString();
 
        }
 
    }
 
2. 编写Activity类:
    packagecn.android.test;
 
    importandroid.app.Activity;
    importandroid.os.Bundle;
    importandroid.util.Log;
    importandroid.view.View;
    importandroid.widget.Button;
    importandroid.widget.EditText;
    importandroid.widget.Toast;
    importcn.android.service.FileService;
 
    publicclass TestAndroidActivityextends Activity {
        /** Called when the activity is first created. */
         
        //得到FileService对象
        privateFileService fileService = newFileService(this);
        //定义视图中的filename输入框对象
        privateEditText fileNameText;
        //定义视图中的contentText输入框对象
        privateEditText contentText;
        //定义一个土司提示对象
        privateToast toast;
 
         
        @Override
        publicvoid 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(newView.OnClickListener() {
                @Override
                publicvoid 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(newView.OnClickListener() {
                @Override
                publicvoid 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方法,判断字符串是否为空
        privateboolean isEmpty(String s) {
        if(s ==null || "".equals(s.trim())) {
            returntrue;
        }
        returnfalse;
        }
         
    }
?
  
作者:风倾清凌
出处:http://www.cnblogs.com/Amandaliu/
原创粉丝点击