Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND。

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。使用该模式创建的文件也只能被应用本身访问。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

如果希望文件被其他应用读和写,可以传入: 

openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE +Context.MODE_WORLD_WRITEABLE);

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

 

 

例子:

 

在共享程序中写入了一个文件

public void saveAndWrite(String name,String content) throws IOException{
if(!name.endsWith(".txt")){
name=name+".txt";
}
       //文件设置了可以被其他应用读和写,可以传入
FileOutputStream putStream = context.openFileOutput(name, Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
putStream.write(name.getBytes());putStream.close();
}

执行了如下代码

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String name = ((EditText)findViewById(R.id.name)).getText().toString();
String content = ((EditText)findViewById(R.id.content)).getText().toString();
FileService file = new FileService(MainActivity.this);
try {
//file.save(name, content);
file.saveAndWrite(name, content);
Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(MainActivity.this, "保存失败", Toast.LENGTH_LONG).show();
}
}
});
}

android文件的四种操作模式 安卓文件操作模式_Text



执行代码后,android系统中保存了一个名为:zhixinhua.txt的文件


 

这文件的权限为-rw-rw-rw- 表示为该文件的可以被本应用和外面其它应用读写

 

 

因此在其它应用程序编程代码测试操作zhixinhua.txt文件:

public class ModeTest extends AndroidTestCase {
/**
 * 写入文件
 * @throws IOException
 */
public void save() throws IOException{
String path ="/data/data/com.example.saveAndRead/files/zhixinhua.txt"; //文件的路径,要遵循linux的合法路径名称
File file = new File(path);
//FileOutputStream outStream = new FileOutputStream(file); //这个会把原来的内容覆盖
 
//如果希望将内容追加到Read+Write的文件末尾,不是采用操作模式,而是:
      FileOutputStream outStream = new FileOutputStream(file, true); //这个把内容追加大原来内容上
outStream.write("i love you".getBytes());
outStream.close();
}
/**
 * 读取文件
 * @throws IOException 
 */
public void write() throws IOException{
String path ="/data/data/com.example.saveAndRead/files/zhixinhua.txt"; //文件的路径,要遵循linux的合法路径名称
File file = new File(path);
FileInputStream inputStream = new FileInputStream(file);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); //实例化捕获内存缓冲区的数据
byte[] buffer = new byte[1024]; //开辟字节大小
int len=0;
while((len=inputStream.read(buffer))!=-1){  ///判断是否读取完成,完成返回-1
byteStream.write(buffer, 0, len);//写入内存
}
byte[] data =byteStream.toByteArray(); // 转化为byte[]
byteStream.close();
inputStream.close();
String content = new String(data); //转化为String
Log.i("content", content);
}
 
}

 

 

Activity还提供了getCacheDir()和getFilesDir()方法:

getCacheDir()方法用于获取/data/data/<packagename>/cache目录

getFilesDir()方法用于获取/data/data/<packagename>/files目录