Android开发系列(五):Android应用中文件的保存与读取
在本篇博客中,我们要实现在Android中“新建文件”和“读取文件”:
目标界面:
在输入文件名称之后,输入文件内容,点击保存,可以保存成为一个文档
首先,我们先建立一个Android Project项目,项目名称:File。
然后,我们需要先实现目标视图中的界面:
编辑strings.xml文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, FileActivity!</string> <string name="app_name">文件操作</string> <string name="filename">文件名称</string> <string name="filecontent">文件内容</string> <string name="button">保存</string> <string name="success">保存完成</string> <string name="fail">保存失败</string> </resources>编辑:main.xml文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/filename" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/filename" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/filecontent" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/filecontent" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:id="@+id/button" /> </LinearLayout>由此,我们就把界面构造完成了,接下来就是编写java代码(关于界面编写过程不再详细说明)。
然后,我们要编辑FileActivity.java(代码具体解释在程序中):
package cn.itcast.files; import cn.itcast.fservice.FileService; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class FileActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //实现布局页面的跳转 Button button = (Button)this.findViewById(R.id.button); //获取Button属性 button.setOnClickListener(new ButtonClickListener()); //为Button设置监听器 } /** * Button点击事件监听器实现 * @author hc * */ private final class ButtonClickListener implements View.OnClickListener{ @Override public void onClick(View v) { //生成默认的方法 EditText filenameText = (EditText)findViewById(R.id.filename); //获得“文件名称”输入框对象 EditText contentText = (EditText)findViewById(R.id.filecontent); //获得“文件内容”输入框对象 String filename = filenameText.getText().toString(); //获得输入的“文件名称” String content = contentText.getText().toString(); //获得输入的“文件内容” //new一个FileService对象,getApplicationContext()返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁 FileService service = new FileService(getApplicationContext()); try { service.save(filename,content); //调用save()方法保存文件 Toast.makeText(getApplicationContext(), R.string.success, 1).show(); //调用一个Toast呈现一个“保存完成”的消息 } catch (Exception e) { Toast.makeText(getApplicationContext(), R.string.fail, 1).show(); //调用Toast对象呈现一个“保存失败”的消息 e.printStackTrace(); } } } }
因此,我们需要建立一个FileService.java类:
package cn.itcast.fservice; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.content.Context; public class FileService { private Context context; public FileService(Context context) { super(); this.context = context; } /** * 写入文件和关闭文件 * @param content 写入内容 * @param outStream 输出流 * @throws IOException */ private void write(String content, FileOutputStream outStream) throws IOException { outStream.write(content.getBytes()); outStream.close(); } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 * @throws Exception */ public void save(String filename, String content) throws Exception { //私有操作模式:创建出来的文件只能被本应用访问,其他应用无法访问该文件。 //另外采用私有操作模式创建的文件,写入文件中的内容会覆盖源文件内容 FileOutputStream outStream = context.openFileOutput(filename,Context.MODE_PRIVATE); //采用私有操作模式打开输出流 write(content, outStream); } /** * 读取文件内容 * @param filename 文件名称 * @return 文件内容 * @throws Exception */ public String read(String filename)throws Exception{ FileInputStream inStream = context.openFileInput(filename); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; //读完返回-1,未读完返回读了多少数据 while((len = inStream.read(buffer)) != -1){ outStream.write(buffer, 0 , len); } byte[] data = outStream.toByteArray(); return new String(data); } }
到了这里,我们就已经把功能实现了,接下来我们把工程部署到Android模拟器中,
测试一下:
可以看到,我们文件已经是保存完成了,在这里我们需要找到这个文件被保存在了哪里。
首先,我们需要打开File Explorer视图:
我们可以在data—>data—>cn.itcast.files(这个是工程所在的包)—>files这个目录下边,找到Test.txt文件,然后我们把它导出到桌面
可以看到里边的内容就是我们输入的内容。
说到这里,文件的保存已经介绍完毕了,接下来我们要介绍一下文件的读取:
我们需要建立一个测试文件,建立测试文件需要首先配置AndroidManifest.xml(关于这个文件的配置请见Android开发系列(四),这就就不再继续配置了)
我们建立一个测试类:FileServiceTest.java(继承AndroidTestCase类):
package cn.itcast.test; import cn.itcast.fservice.FileService; import android.test.AndroidTestCase; import android.util.Log; public class FileServiceTest extends AndroidTestCase { private static final String TAG = "FileServiceTest"; //设置一个TAG public void testRead() throws Throwable{ FileService service = new FileService(this.getContext()); String result = service.read("Test.txt"); //读取文件Test.txt Log.i(TAG, result); //把得到的文件的内容result交给TAG。然后我们就可以在LogCat界面中查看得到了 } }可以查看如下:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。