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);
}
}