android之使用文件进行数据存储
来源:互联网 发布:java生成唯一订单号 编辑:程序博客网 时间:2024/05/01 06:56
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("xxx.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
测试:建立两个工程file与test
File中的service层:
package cn.com.service;public class FileService { private Context context; public FileService(Context context){ this.context = context; } /** * 保存文件 */ public void save(String filename, String filecontent)throws IOException { //私有操作模式,创建出来的文件只能被本应用访问,其他应用无法访问该文件,另外采用私有模式创建的文件将覆盖原文件 //android系统-->(保存)sdcard,对系统来说用输出流 FileOutputStream outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(filecontent.getBytes()); outputStream.close(); } public String read(String filename) throws IOException{ //sdcard-->android系统,对系统来说用输入流 FileInputStream inputStream = context.openFileInput(filename); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while((len = inputStream.read(buffer))!=-1){ outputStream.write(buffer, 0, len); } byte[] data = outputStream.toByteArray(); return new String(data); } /** * Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 */ public void saveAppend(String filename, String filecontent)throws IOException { FileOutputStream outputStream = context.openFileOutput(filename, Context.MODE_APPEND); outputStream.write(filecontent.getBytes()); outputStream.close(); } /** * Context.MODE_READABLE:表示当前文件可以被其他应用读取件。 */ public void saveReadable(String filename, String filecontent)throws IOException { FileOutputStream outputStream = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); outputStream.write(filecontent.getBytes()); outputStream.close(); } /** * MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。。 */ public void saveWriteable(String filename, String filecontent)throws IOException { FileOutputStream outputStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE); outputStream.write(filecontent.getBytes()); outputStream.close(); } /** * Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用读写。 */ public void saveReadableAndWriteable(String filename, String filecontent)throws IOException { FileOutputStream outputStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE+Context.MODE_WORLD_READABLE); outputStream.write(filecontent.getBytes()); outputStream.close(); }}
File中的测试类,来生成另一应用用来测试的文件:
package cn.com.test;public class FileServicetest extends AndroidTestCase{ private static final String TAG = "FileServicetest"; public void testRead() throws Throwable{ //AndroidTestCase提供了this.getContext(),这个方法提供了取得上下文对象 FileService service = new FileService(this.getContext()); String result = service.read("abc.txt"); //通过log打印到控制台上 Log.i(TAG,result); } /** * 测试利用append追加模式生成文件append.txt,供cn.itcast.other应用读取 * @throws Throwable */ public void testsaveAppend() throws Throwable{ FileService service = new FileService(this.getContext()); service.saveAppend("append.txt", ",追加模式"); } /** * 测试利用Readable模式生成文件Readable.txt,供cn.itcast.other应用读取 * @throws Throwable */ public void testsaveReadable() throws Throwable{ FileService service = new FileService(this.getContext()); service.saveReadable("Readable.txt", "Readable"); } /** * 测试利用Readable模式生成文件Readable.txt,供cn.itcast.other应用读取 * @throws Throwable */ public void testsaveWriteable() throws Throwable{ FileService service = new FileService(this.getContext()); service.saveWriteable("Writeable.txt", "Writeable"); } /** * 测试利用Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE模式生成文件rw.txt,供cn.itcast.other应用使用(读与写) * @throws Throwable */ public void testsaveReadableAndWriteable() throws Throwable{ FileService service = new FileService(this.getContext()); service.saveReadableAndWriteable("rw.txt", "rw"); }}项目Other中的测试结果:package cn.com.test; public class AccessOtherAppFile extends AndroidTestCase { //抽取出读方法 private static String read(InputStream inputStream)throws Exception{ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } byte[] data = outputStream.toByteArray(); return new String(data); } /** * Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 * 测试读取cn.com.file应用中用Context.MODE_PRIVATE创建的文件abc.txt的时候,由于设置的为Context.MODE_PRIVATE模式,不能被该应用访问,报错 * :java.io.FileNotFoundException: /data/data/cn.com.files/files/abc.txt(Permission denied) at */ public void testAccessFile() throws Throwable { String path = "/data/data/cn.com.files/files/abc.txt"; // 构建文件对象 File file = new File(path); // 构建文件输入流对象 FileInputStream inputStream = new FileInputStream(file); Log.i("AccessOtherAppFile", new String(read(inputStream))); } /** * Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。只能被应用本身访问。 * 测试读取cn.com.file应用中用Context.MODE_APPEND创建的文件append.txt的时候,不能被该应用访问,报错同上 */ public void testAccessFile2() throws Throwable { String path = "/data/data/cn.com.files/files/append.txt"; File file = new File(path); FileInputStream inputStream = new FileInputStream(file); Log.i("AccessOtherAppFile", new String(read(inputStream))); } /** * MODE_WORLD_READABLE:表示当前文件可以被其他应用读取 * 测试读取cn.com.file应用中用Context.MODE_READABLE创建的文件Readable.txt的时候,能被该应用访问 */ public void testAccessFile3() throws Throwable { String path = "/data/data/cn.com.files/files/Readable.txt"; File file = new File(path); FileInputStream inputStream = new FileInputStream(file); Log.i("AccessOtherAppFile", new String(read(inputStream))); } /** * MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入 * 测试读取cn.com.file应用中用MODE_WORLD_WRITEABLE创建的文件Readable.txt的时候,不能被访问 */ public void testAccessFile4() throws Throwable { String path = "/data/data/cn.com.files/files/Writeable.txt"; File file = new File(path); FileInputStream inputStream = new FileInputStream(file); Log.i("AccessOtherAppFile", new String(read(inputStream))); } /** * MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入 * 下面用写方法测试 */ public void testAccessFile5() throws Throwable { String path = "/data/data/cn.com.files/files/Writeable.txt"; File file = new File(path); FileOutputStream outputStream = new FileOutputStream(file); outputStream.write("abcdefghijklmn".getBytes()); outputStream.close(); } /** * Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用读写 * 测试能够读取cn.com.file应用中创建的rw.txt */ public void testAccessFile6() throws Throwable { String path = "/data/data/cn.com.files/files/rw.txt"; File file = new File(path); FileInputStream inputStream = new FileInputStream(file); Log.i("AccessOtherAppFile", new String(read(inputStream))); } /** * Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用读写 * 测试能够对cn.com.file应用中创建的rw.txt进行写操作 */ public void testAccessFile7() throws Throwable { String path = "/data/data/cn.com.files/files/rw.txt"; File file = new File(path); FileOutputStream outputStream = new FileOutputStream(file); outputStream.write("abcdefghijklmnaaaaaaa".getBytes()); outputStream.close(); }}
往sd卡中写文件的时候,要申请相应权限
判断sd卡状态
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
获取sd卡路径:
Environment.getExternalStorageDirectory()
- android之使用文件进行数据存储
- Android之使用文件进行数据存储
- Android 数据存储 之 使用文件进行数据存储
- android基础---使用文件进行数据存储
- Android如何使用文件进行数据存储
- 使用文件进行数据存储
- 使用文件进行数据存储
- 使用文件进行数据存储
- 使用文件进行数据存储
- Android中使用File文件进行数据存储
- Android中使用SharedPreferences进行数据存储及文件操作
- 自学Android系列 笔记2 使用文件进行数据存储
- android使用文件进行存储
- 5.2、Android数据存储和数据公开-使用文件进行数据存储
- Android核心基础-5.Android 数据存储与访问-1.使用文件进行数据存储
- Android数据存储和访问(使用文件进行数据存储)
- Android数据存储之文件存储数据
- Android数据存储与访问之使用SharedPreferences进行数据存储
- java网络编程基础知识
- (弥补关系数据库的不足,处理海量数据利器)NoSQL运动全解析
- 学习7(11-09-19)
- Android 使用基于位置的服务(一)
- TCP连接的释放
- android之使用文件进行数据存储
- 数据库管理系统(DBMS)理解及实现
- 结构体作为参数和返回值原理
- 图像校正/配准
- C/C++的内存管理
- Host key verification failed的解决方法
- 以后该如何写博客?
- UML学习
- HDOJ 1698 Just a Hook