1.首先获取文件输出流
直接调用方法public FileOutputStream openFileOutput (String name, int mode)
参数:
name:要输出文件的名称,自己定义,要符合文件命名规则
mode:文件读取权限
2.文件读取权限详解
Context. MODE_PRIVATE:-rw-rw—- 创建应用私有的文件
Context. MODE_APPEND:-rw-rw—- 权限等同于private
Context. MODE_WORLD_READABLE:-rw-rw-r– 创建全局可读文件
Context. MODE_WORLD_WRITEABLE:-rw-rw–w- 创建全局可写文件
示例代码:5种权限方式进行文件创建
package com.llj.privatefilerwx;
import ***
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
* 创建一个 私有的文件
*
* 每个应用程序 都一个私有的文件夹, /data/data/com.itheima.filemode
*
*
* 私有的文件 ,只有 当前的应用 自己可以去访问, 其他的应用没有 办法 去访问 -- 其他的应用既不 可以 读,也不可以写
*/
public void getPrivateFile(View v) {
try {
File file = new File(this.getFilesDir(), "private.txt");
OutputStream out = new FileOutputStream(file);
out.write("private".getBytes());
out.close();
Toast.makeText(this, "写入私有文件成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "写入私有文件失败 ", Toast.LENGTH_SHORT).show();
}
}
// 谷歌不推荐咱们这样做 : 引入了新的组件 --- contentProvider
// 创建一个只读的文件 : 其他的应用可以去读,但是不能去写
public void getReadOnlyFile(View v) {
try {
FileOutputStream out = openFileOutput("readonly.txt",
Context.MODE_WORLD_READABLE);
out.write("readonly".getBytes());
out.close();
Toast.makeText(this, "写入只读文件成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "写入只读文件失败 ", Toast.LENGTH_SHORT).show();
}
}
//写入 只可 写 文件
public void getWriteOnlyFile(View v) {
try {
FileOutputStream out = openFileOutput("writeonly.txt",
Context.MODE_WORLD_WRITEABLE);
out.write("writeonly".getBytes());
out.close();
Toast.makeText(this, "写入只可写文件成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "写入只可写文件失败 ", Toast.LENGTH_SHORT).show();
}
}
// 其他应用 可以读 也可以写的文件
public void getPublicFile(View v) {
try {
FileOutputStream out = openFileOutput("public.txt",
Context.MODE_WORLD_WRITEABLE + Context.MODE_WORLD_READABLE);
out.write("public".getBytes());
out.close();
Toast.makeText(this, "写入可读可写 成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "写入可读可写 失败 ", Toast.LENGTH_SHORT).show();
}
}
}
接下来,我们写一个Layout文件画一个简单界面,画4个button,分别绑定对应的触发事件,如在button标签中直接绑定触发事件android:onClick="getWriteOnlyFile"
运行的结果如下:
解释一下文件对应关系:
private.txt文件(-rw------
)是由bt1(创建一个私有的文件)创建的,调用的方法是:
最普通的创建文件的方法
File file = new File(this.getFilesDir(), "private.txt");
OutputStream out = new FileOutputStream(file);
out.write("private".getBytes());
private2.txt文件(-rw------
)是由bt2(创建一个私有的文件方式2)创建的,文件权限是:Context.MODE_PRIVATE
readonly.txt文件(-rw-rw-r--
)是由bt3(创建一个只读的文件)创建的,文件权限是:Context.MODE_WORLD_READABLE
writeonly.txt文件(-rw-rw--w-
)是由bt4(创建一个只可写的文件)创建的,文件权限是:Context.MODE_WORLD_WRITEABLE
public.txt文件(-rw-rw-rw-
)是由bt5(创建一个可读也可写的文件)创建的,文件权限是: Context.MODE_WORLD_WRITEABLE + Context.MODE_WORLD_READABLE
遗憾的告诉你,这种方法因为存在安全漏洞,已经过时了
谷歌推荐使用 ContentProvider / BroadcastReceiver/ android.app.Service 来替代这种方法