今天学习了Android的文件存取技术,在Android的中很多时候需要用到文件存取相关功能,即我们可以在手机或SD Card中存放我们期望放入的文件、读取文件内容以及等操作来达到相应目的。
文件存储模式:
1. Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把写入的内容追加到原文件中,可以使用Context.MODE_APPEND。
2. COntext.MODE_APPEND:改模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORDL_REABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
3. Context.MODE_WORLD_REABLE:表示当前文件可以被其他应用读取。
4. Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以使用:
openFileOutput("filename",Context.MODE_WORLD_READBLE+Context.MODE_WORLD_WRITEABLE);
android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的,其他应用程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有这样其他程序才能正确访问。
下面我结合自己的理解,解释一下Android中的文件存储:
1. 建立布局文件,我们最终要实现的是如下界面,具体功能是输入文件名和文件内容点击保存按钮就将此文件保存到手机上:
2. 编写代码实现响应功能:
下面只贴出核心代码
1 import java.io.ByteArrayOutputStream; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 8 import android.content.Context; 9 10 /** 11 * @author fanchangfa 12 * 文件操作类: 13 * 文件保存 14 * 文件读取 15 */ 16 public class FileOperate{ 17 Context context; 18 19 public FileOperate(Context context) { 20 this.context = context; 21 } 22 23 24 25 /** 26 * 保存文件方法 27 * @param filename 文件名称 28 * @param content 文件内容 29 * @throws IOException 30 */ 31 public void save(String filename , String content) throws IOException 32 { 33 FileOutputStream file_stream = context.openFileOutput(filename, Context.MODE_PRIVATE); 34 file_stream.write(content.getBytes()); 35 file_stream.close(); 36 } 37 38 public String read(String filename)throws IOException 39 { 40 //获取文件对象 41 File file = new File(filename); 42 //获取输出流对象 43 FileInputStream instream = new FileInputStream(file); 44 //获得存放输出流的集合 45 ByteArrayOutputStream bstream = new ByteArrayOutputStream(); 46 //定义每次保存输出数据的字节数组 47 byte[] buffer = new byte[1024]; 48 49 //每次读取数据的长度 50 int len = 0; 51 52 while((len = instream.read(buffer))!=-1) 53 { 54 bstream.write(buffer, 0, len); 55 } 56 57 instream.close(); 58 bstream.close(); 59 60 61 byte[] data = bstream.toByteArray(); 62 return new String(data); 63 64 //return new String(bstream.toString()); 65 } 66 }
3. 保存文件成功以后,文件默认保存在/data/data/package名字/files/保存的文件名,如下图,我保存的是一个a.txt文件:
响应的读取文件核心代码也写好,有需要的可以自己实现,其实Android中文件存取很简单,和Java数据流操作一样。需要注意的是文件存储时的模式不同,应用于各个应用程序之间的权限也各部相同。