实例教程三:文件的保存与读取

使用代码嵌入android.os.SystemProperties的方法(转)
http://www.eoeandroid.com/thread-206961-1-1.html

Android网络连接处理方法
http://www.eoeandroid.com/thread-206925-1-1.html

IReader书架效果的实现想法,唯一的问题是对美工的技能要...
http://www.eoeandroid.com/thread-206909-1-1.html

布局文件:  

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical" >
 
    <TextView
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="@string/fileName" />
     
    <EditText 
        android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:id="@+id/edtFileName"/>
     
    <TextView
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="@string/fileContent" />
     
    <EditText 
        android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:id="@+id/edtFileContent"
         android:minLines="3"/>
     
    <Button 
        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/btnSave"
         android:text="@string/fileSave"/>
 
</LinearLayout>
 
<?xml version="1.0" encoding="utf-8"?>
 <resources>
 
    <string name="hello">Hello World, MainActivity!</string>
     <string name="app_name">文件操作</string>
     <string name="fileName">文件名称</string>
     <string name="fileContent">文件内容</string>
     <string name="fileSave">保存</string>
     <string name="success">保存完成</string>
     <string name="fail">保存失败</string>
 
</resources>
package cn.itcast.files;
 

import cn.itcast.service.FileService; 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast;
 

public class MainActivity extends Activity implements OnClickListener{
 
        private EditText edtFileName; 
        private EditText edtFileContent; 
        private Button btnSave;

        @Override
 
        public void onCreate(Bundle savedInstanceState) {
 
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                initView();
        }
 
       private void initView(){
 
               edtFileName = (EditText)this.findViewById(R.id.edtFileName);
                 edtFileContent = (EditText)this.findViewById(R.id.edtFileContent);
                 btnSave = (Button)this.findViewById(R.id.btnSave);    
                btnSave.setOnClickListener(this);
 
        }
        @Override
 
        public void onClick(View v) {
 
                switch(v.getId()){
 
                case R.id.btnSave:
 
                        String fileName = edtFileName.getText().toString();
                        String fileContent = edtFileContent.getText().toString();
 
                        FileService service = new FileService(this);
                        try {
 
                                service.save(fileName, fileContent);
                                Toast.makeText(getApplicationContext(), R.string.success, 1).show();
 
                        } catch (Exception e) {
                                Toast.makeText(getApplicationContext(), R.string.fail, 1).show();
                                e.printStackTrace();
                        }
 
                        break;
                default:
                        break;
                 }
        }
 }
package cn.itcast.service;
 

import java.io.ByteArrayOutputStream;
 
import java.io.FileInputStream;
 
import java.io.FileOutputStream;
 

import android.content.Context;
 


public class FileService {
 
        private Context context;
 
        
        public FileService(Context context){
 
                this.context = context;
 
        }
 

        /**
 
         * 保存文件
 
         * @param fileName 文件名称
 
         * @param fileContent 文件内容
 
         */
 
        public void save(String fileName, String fileContent) throws Exception{
 
                //IO j2se
 
                
                //Context.MODE_PRIVATE --私有操作模式:创建出来的文件只能被本应用访问,其它应用无法访问该文件
 
                //另外采用私有操作模式创建的文件,写入文件中的内容会覆盖原文件内容
 
                //如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND
 
                FileOutputStream outStream = context.openFileOutput(fileName, Context.MODE_PRIVATE);
 
                outStream.write(fileContent.getBytes());
 
                outStream.close();
 
        }
 
        
        /**
 
         * 读取文件内容
 
         * @param fileName 文件名称
 
         * @return 文件内容
 
         * @throws Exception
 
         */
 
        public String read(String fileName) throws Exception{
 
                FileInputStream inStream = context.openFileInput(fileName);
 
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();
 
                byte[] buffer = new byte[1024];
 
                //防止数据量过大,超过了1024
 
                int len = 0;
 
                while((len = inStream.read(buffer)) != -1){
 
                        //防止每次读取覆盖前一次数据
 
                        outStream.write(buffer, 0, len);
 
                }
 
                
                byte[] data = outStream.toByteArray();
 
                
                return new String(data);
 
        }
 
        
        //Context.MODE_APPEND --模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
 
        //Context.MODE_WORLD_READABLE和Context.Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件
 
        //MODE_WORLD_READABLE: 表示当前文件可以被其它应用读取
 
        //MODE_WORLD_WRITEABLE: 表示当前文件可以被其它应用写入
 
        //如果希望文件被其他应用读和写,可以传入:
 
        //openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + 
        //                        Context.Context.MODE_WORLD_WRITEABLE);
 
        
        
        //android有一套自己的安全模式,当应用程序(.apk)在安装时系统就会分配给他一个userId
 
        //当该应用要去访问其它资源比如文件的时候,就需要userId匹配,默认情况下,任何应用创建的文件,
 
        //sharePerferences,数据库都应该是私有的(位于/data/data/<package name>/files),
 
        //其它程序无法访问,除非在创建时指定了Context.MODE_WORLD_READABLE或者
 
        //Context.Context.MODE_WORLD_WRITEABLE,只有这样其它程序才能正确访问
 
}
 

单元测试:

package cn.itcast.test;
 

import cn.itcast.service.FileService;
 
import android.test.AndroidTestCase;
 
import android.util.Log;
 

public class FileServiceTest extends AndroidTestCase{
 
        private static final String TAG = "FileServiceTest";
 
        
        public void testRead() throws Throwable{
 
                FileService service = new FileService(this.getContext());
 
                String result = service.read("itcast.txt");
 
                Log.i(TAG, result);
 
        }
 
}
 
原文地址:https://www.cnblogs.com/vus520/p/2725705.html