Android(安卓)文件IO操作
最近在Android的学习中,经常用到文件的IO操作,今天就简单的总结一下
首先是File类的概念
File类给我的感觉就是文件夹的管理,涉及文件的目录,长度和文件的读写权限等操作,不涉及文件的读写操作。可以联想下我们电脑的上的文件管理。一般要新建一个文件都是方法某个文件夹下的,搜索某个文件的的时候,一般都有路径,如G:\11game\11Game.exe。应此在读写文件前需要给文件定位。
如何操作呢?
想想平时,第一步,要新建一个文件夹,在某个目录下,java的代码中是这样写的
File file=new File(“文件的目录路径”);
file.mkdir();
有了目录以后,就可以创建文件了
定义文件的名称,记得要带后缀名
File file=new File(“文件的目录+文件的名称”);
file.createNewFile();
新建完成
如果直接不新建目录就执行上一步,就会抛出异常
这里主要路径的写法 一般在Window下 都是E://sime/ 这样的写法 反斜杠,在Android开发中都是斜杠,但是在Android中, File dir=Environment.getExternalStorageDirectory();方法来获路径这样最好。
然后在 File file=new File(dir,”sime.txt”);
常用的方法有 exists(检查文件是否存在)和delete(删除文件)
在给文件准确的定位后,就可以对其进行读写操作了
读写之前别忘了加入读写权限咯
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>"
Java对文件的读写有两种,分别是字节流和字符流
字节流抽象类有字节输入流 InputStream和字节输出流OutputStream。
一般初学者会这样认为,Input输入就是写入,Output输出就是读取。但是现实正好相反
要从内存的角度来思考,流的操作都是在内存中操作的。(其实我也不是怎么理解--会用就行)
抽象类是不能实例化的,在实际的开发中我们用的都是其子类
字符流对应的是Reader类和Writer类(这个好像就符合常规逻辑了)
首先介绍的文件字节流的使用
如果需要以字节为单位去读取写入文件,就可以使这个,下面是构造方法
FileInputStream(String name);
FileInputStream(File file);
FileOutputStream(String name);
FileInputStream(File file);
//我都建议用第二中构造方法,这样代码更规范化
上代码
//文件字节输入流
private void FileInputStreamdome(File file){ try { FileInputStream in=new FileInputStream(file); int date=0; String msg=""; while((date=in.read())!=-1) { msg+=(char)date; } in.close(); setTextView(msg); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //文件字节输出流private void FileOutpurStreamdome(File file){ try { FileOutputStream out=new FileOutputStream(file); byte [] a="sime的测试".getBytes(); out.write(a,0,a.length); out.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
乱码!!!!如何解决呢?
加上一句就好
private void FileInputStreamdome(File file){try {FileInputStream in=new FileInputStream(file);InputStreamReader reader = new InputStreamReader (in,"UTF-8"); //这句,下面也做出相应的改动int date=0;String msg="";while((date=reader.read())!=-1){msg+=(char)date;}reader.close();in.close();setTextView(msg);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
文件字符流
运行结果如下,没有乱码
//文件字符输入流
private void FileReaderdome(File file){try {FileReader reader=new FileReader(file);int date=0;String msg="";while ((date=reader.read())!=-1){msg+=(char)date;}reader.close();setTextView(msg);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//文件字符输出流private void FileWritedome(File file){try {FileWriter writer=new FileWriter(file);writer.write("我爱看银魂");writer.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
最后本次在介绍 数据流这个在android读写二进制数据中常用
构造方法
DataInputStream (InputStream in)数据输入流DataOutputStream(OutputStream out)数据输出流,可见数据流要和文件字节流合用
上代码
//数据输入流private void DataInputStreamdome(File file){try {FileInputStream in=new FileInputStream(file);DataInputStream datain=new DataInputStream(in);String msg=datain.readUTF();datain.close();in.close();setTextView(msg);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//数据输出流private void DataOutputStreamdome(File file){try {FileOutputStream out=new FileOutputStream(file);DataOutputStream dateout=new DataOutputStream(out);dateout.writeUTF("dota all star玩家");dateout.close();out.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
这次先到这里,IO操作太多,下次继续
更多相关文章
- Android(安卓)上的 Chrome 终于,即将,就要,支持文件上传(input type=
- Android(安卓)Studio apk打包,keystore.jks文件生成,根据keystore
- Android(安卓)如何正确使用我们的图片资源
- 【Android】Android中用代码复制文件的大小限制
- [Android]反编译查看、修改源码、逆向分析以及二次打包签名
- Android中如何通过文件路径判断是否是同一文件
- 修改Android中strings.xml文件, 动态改变数据
- Android(安卓)Studio官方文档之使用Lint提高你的代码质量篇
- 关于android app相关破解技术