Android初试--Android中的文件操作之ROM操作(1)

RAM(Random Access Memory)随机存储器,在手机中称为运行内存。通俗的说,就像电脑的内存。在断电以后保存在上面的数据会自动消失。
ROM(Read-Only Memory)只读存储器,存放手机固件代码的存储器,比如手机的操作系统、一些应用程序如游戏等。通俗的说,就像电脑的硬盘。在断电以后保存在上面的数据不会自动消失。
SDCARD:通俗的说,就像外接硬盘。

①往手机自带的存储空间写入文件
FileOutputStream outStream = this.getContext().openFileOutput(“test.txt”, Context.MODE_PRIVATE);
outStream.write(“helloworld”.getBytes());
outStream.close();

openFileOutput(String name, int mode)方法的第一参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android应用会自动创建它。
创建的文件保存在/data/data//files目录,如:/data/data/com.rxr.file/files/test.txt,
通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开Android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/com.rxr.file/files目录就可以看到保存的文件test.txt。
openFileOutput(String name, int mode)方法的第二参数用于指定操作模式,有四种模式,分别为:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND。
Context.MODE_APPEND:创建的文件是私有数据,该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望该文件被其他应用读和写,可以这样写: openFileOutput(“test.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,如果该应用要去访问其他资源比如文件的时候,就需要userid匹配。
默认情况下,任何应用创建的文件、SharedPreferences、数据库都应该是私有的(位于/data/data//files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有这样设置其他程序才能正确访问。

②从手机自带的存储空间里面读取文件
FileInputStream inStream = this.getContext().openFileInput(“test.txt”);
//定义缓冲区大小
byte [] buffer = new byte[1024];
int len = 0;
//内存输出流
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//从输入流里面读取数据到缓冲区,如果读取到流的末尾返回-1,否则返回读取到的实际字节长度
while( (len = inStream.read(buffer)) != -1 ){
//往内存中写入数据
outStream.write(buffer, 0, len);
}
//获取内存中该文件的二进制数据
byte [] data = outStream.toByteArray();
outStream.close();
inStream.close();

Activity的getFilesDir()方法:返回/data/data/com.rxr.file/files文件对象
Activity的getCacheDir()方法:返回/data/data/com.rxr.file/cache文件对象,存放一些缓存数据

import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
    private  EditText  inputtext=null;
    private  Button  save=null;
    private  Button  read=null;
    private  TextView  showdata=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局文件
        setContentView(R.layout.activity_main);
        //组件的初始化
        init();  
    }
    /*
     * 组件的初始化
     */
    private void init() {
        inputtext= (EditText)findViewById(R.id.editText1);
        save= (Button)findViewById(R.id.button1);
        read= (Button)findViewById(R.id.button2);
        showdata= (TextView)findViewById(R.id.textView2);
        MyClick  click=new MyClick();
        //给按钮添加单击事件
        save.setOnClickListener(click);
        read.setOnClickListener(click);
    }
    /*
     * 单击事件的接口类
     */
    public  class  MyClick  implements OnClickListener{
        @Override
        public void onClick(View view) {
        switch(view.getId()){
        case R.id.button1:
            //保存数据到手机自带的存储空间
            saveDataToRom();
            Toast.makeText(MainActivity.this, "数据保存成功", 3000).show();
            break;
        case  R.id.button2:
            //从手机自带的存储空间读取数据
            fromRomReadData();
            break;
        }
        }
    }
    /*
     * 保存数据到手机自带的存储空间
     */
    public void saveDataToRom() {
        //得到文本框中输入的数据
        String  info=inputtext.getText().toString();
        //打开输出流
        //openFileOutput有两个参数
        //第一个参数  保存文件的文件名称
        //第二个参数 文件的操作模式
        /*
         * Context.MODE_PRIVATE = 0    私有模式,不允许追加
           Context.MODE_APPEND = 32768   私有模式,允许追加
           Context.MODE_WORLD_READABLE = 1  允许其他程序只读
           Context.MODE_WORLD_WRITEABLE = 2 允许其他程序可写 
         */
        try {
            FileOutputStream  output=this.openFileOutput("rxr.txt", Context.MODE_APPEND);
            //保存数据
            output.write(info.getBytes());
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*
     * 从手机自带的存储空间读取数据
     */
    public void fromRomReadData() {
        String info="";
        //得到输入流对象
        try {
            FileInputStream input=this.openFileInput("rxr.txt");
            byte  databyte[]=new byte[1000];
            int len=input.read(databyte);
            info=new String(databyte,0,len);
            input.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //将数据显示在textview上
        showdata.setText(info);
    }
}

猜你喜欢

转载自blog.csdn.net/guizhaiteng/article/details/51181430