android 文件操作详解
android 的文件操作说白了就是java的文件操作的处理。所以如果对java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了。好了,话不多说,开始今天的正题吧。
先从一个小项目入门吧
首先是一个布局文件,这一点比较的简单,那就直接上代码吧。
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文件名称" /> <edittext android:id="@+id/et_filename" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="file name" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文件内容" /> <edittext android:id="@+id/et_filecontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="7" android:hint="file content" /> <button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:onclick="tosave" android:text="save" /> <button android:id="@+id/btn_get" android:layout_width="match_parent" android:layout_height="wrap_content" android:onclick="getfile" android:text="get" /> </linearlayout>
然后是我们的主界面的java文件了。继续上代码
package com.mark.storage; import android.app.activity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.toast; import com.mark.service.fileservice; public class mainactivity extends activity { private edittext met_filename,met_filecontent; private button mbtn_save; private void init(){ met_filecontent = (edittext) findviewbyid(r.id.et_filecontent); met_filename = (edittext) findviewbyid(r.id.et_filename); mbtn_save = (button) findviewbyid(r.id.btn_save); } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); init(); } /** * 保存数据到一个文件中 * @param view */ public void tosave(view view) { string filename = met_filename.gettext().tostring(); string filecontent = met_filecontent.gettext().tostring(); fileservice service = new fileservice(getapplicationcontext()); boolean issucceed = service.save(filename, filecontent); if(issucceed){ toast.maketext(getapplicationcontext(), "恭喜您保存文件成功!", toast.length_short).show(); }else{ toast.maketext(getapplicationcontext(), "对不起,您保存文件失败!", toast.length_short).show(); } } public void getfile(view view){ string filename = met_filename.gettext().tostring(); fileservice service = new fileservice(getapplicationcontext()); string filecontent = service.getfile(filename); if(filecontent!=null || !filecontent.equals("")) { met_filecontent.settext(filecontent); }else{ toast.maketext(getapplicationcontext(), "对不起,读取文件失败!", toast.length_short).show(); } } }
是不是感觉里面的代码有点奇怪呢?fileservice是什么鬼?
其实fileservice就是我们的业务类,主要的功能就是帮助我们实现了对文件的保存和读取等操作。下面也贴出代码
package com.mark.service; import java.io.bytearrayoutputstream; import java.io.fileinputstream; import java.io.fileoutputstream; import android.content.context; public class fileservice { //android自带的可以快速获得文件输出流的一个类,注意参数不能是路径,只能是文件名称 private context mcontext; public fileservice(context context) { this.mcontext = context; } /** * 保存文件的一个方法 * @param filename * @param filecontent * @return */ public boolean save(string filename, string filecontent) { try { //采用context.mode_private模式的话,只允许本应用访问此文件,并且熟覆盖式的添加数据 fileoutputstream fos = mcontext.openfileoutput(filename, context.mode_private); fos.write(filecontent.getbytes()); fos.close(); return true; } catch (exception e) { e.printstacktrace(); return false; } } /** * 获得之前保存过的文件的详细的信息 * @param filename * @return */ public string getfile(string filename) { string filecontent = ""; try{ fileinputstream fis = mcontext.openfileinput(filename); byte[] buf = new byte[1024]; int len; bytearrayoutputstream bais = new bytearrayoutputstream(); while((len = fis.read(buf))!= -1){ bais.write(buf, 0, len); } byte[] data = bais.tobytearray(); filecontent = new string(data); fis.close(); return filecontent; }catch(exception e){ e.printstacktrace(); return "对不起,读取文件失败!"; } } }
业务类的分析
现在开始进入正题咯。这个小项目的核心就在于这个业务类,原因如下:
核心
分层的思想,不同的功能的类放置到不同的包内,这样既方便程序的调试,也方便今后的代码的维护。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
如对本文有疑问, 点击进行留言回复!!
Xamarin 安卓 相机 各种坑 目标API Android 6以后,我选的目标API版本是 Android 10
Android 9.0+软件某些功能突然暴毙:cleartext not permitted
Android : Resource is not a Drawable (color or path)
Flutter问题集锦——Android Studio 4.0.1 在AVD Manger中启动模拟器报“unable to locate abd”
网友评论