Android实现文件的保存与读取功能示例

本文实例讲述了Android实现文件的保存与读取功能。分享给大家供大家参考,具体如下:

注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径

getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache

1. 编写文件读取与写入功能实现类 FileService

package cn.android.service; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; import android.util.Log; /** * 文件保存与读取功能实现类 * @author Administrator * * 2010-6-28 下午08:15:18 */ public class FileService { public static final String TAG = "FileService"; private Context context; //得到传入的上下文对象的引用 public FileService(Context context) { this.context = context; } /** * 保存文件 * * @param fileName 文件名 * @param content 文件内容 * @throws Exception */ public void save(String fileName, String content) throws Exception { // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀 if (!fileName.endsWith(".txt")) { fileName = fileName + ".txt"; } byte[] buf = fileName.getBytes("iso8859-1"); Log.e(TAG, new String(buf,"utf-8")); fileName = new String(buf,"utf-8"); Log.e(TAG, fileName); // Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND // Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。 // MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 // 如果希望文件被其他应用读和写,可以传入: // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); } /** * 读取文件内容 * * @param fileName 文件名 * @return 文件内容 * @throws Exception */ public String read(String fileName) throws Exception { // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀 if (!fileName.endsWith(".txt")) { fileName = fileName + ".txt"; } FileInputStream fis = context.openFileInput(fileName); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int len = 0; //将读取后的数据放置在内存中---ByteArrayOutputStream while ((len = fis.read(buf)) != -1) { baos.write(buf, 0, len); } fis.close(); baos.close(); //返回内存中存储的数据 return baos.toString(); } }

2. 编写Activity类:

package cn.android.test; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import cn.android.service.FileService; public class TestAndroidActivity extends Activity { /** Called when the activity is first created. */ //得到FileService对象 private FileService fileService = new FileService(this); //定义视图中的filename输入框对象 private EditText fileNameText; //定义视图中的contentText输入框对象 private EditText contentText; //定义一个土司提示对象 private Toast toast; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //得到视图中的两个输入框和两个按钮的对象引用 Button button = (Button)this.findViewById(R.id.button); Button read = (Button)this.findViewById(R.id.read); fileNameText = (EditText) this.findViewById(R.id.filename); contentText = (EditText) this.findViewById(R.id.content); //为保存按钮添加保存事件 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String fileName = fileNameText.getText().toString(); String content = contentText.getText().toString(); //当文件名为空的时候,提示用户文件名为空,并记录日志。 if(isEmpty(fileName)) { toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.w(fileService.TAG, "The file name is empty"); return; } //当文件内容为空的时候,提示用户文件内容为空,并记录日志。 if(isEmpty(content)) { toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_content, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.w(fileService.TAG, "The file content is empty"); return; } //当文件名和内容都不为空的时候,调用fileService的save方法 //当成功执行的时候,提示用户保存成功,并记录日志 //当出现异常的时候,提示用户保存失败,并记录日志 try { fileService.save(fileName, content); toast = Toast.makeText(TestAndroidActivity.this, R.string.success, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.i(fileService.TAG, "The file save successful"); } catch (Exception e) { toast = Toast.makeText(TestAndroidActivity.this, R.string.fail, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.e(fileService.TAG, "The file save failed"); } } }); //为读取按钮添加读取事件 read.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //得到文件名输入框中的值 String fileName = fileNameText.getText().toString(); //如果文件名为空,则提示用户输入文件名,并记录日志 if(isEmpty(fileName)) { toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.w(fileService.TAG, "The file name is empty"); return; } //调用fileService的read方法,并将读取出来的内容放入到文本内容输入框里面 //如果成功执行,提示用户读取成功,并记录日志。 //如果出现异常信息(例:文件不存在),提示用户读取失败,并记录日志。 try { contentText.setText(fileService.read(fileName)); toast = Toast.makeText(TestAndroidActivity.this, R.string.read_success, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.i(fileService.TAG, "The file read successful"); } catch (Exception e) { toast = Toast.makeText(TestAndroidActivity.this, R.string.read_fail, Toast.LENGTH_LONG); toast.setMargin(RESULT_CANCELED, 0.345f); toast.show(); Log.e(fileService.TAG, "The file read failed"); } } }); } //编写一个isEmpty方法,判断字符串是否为空 private boolean isEmpty(String s) { if(s == null || "".equals(s.trim())) { return true; } return false; } }

3.文件布局文件: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/content" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:minLines="3" android:id="@+id/content" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button" android:text="@string/save" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/read" android:text="@string/read" /> </LinearLayout> </LinearLayout>

PS:由于我在测试这个功能的时候发现文件名无法使用中文(sdk2.2 + 模拟器),如果有哪为高手无意中浏览此文章后,能对这个问题予以指点,我将感激不尽。呵呵。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android文件操作技巧汇总》、《Android编程之activity操作技巧总结》、《Android视图View技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-11-25 17:26:22

Android实现文件的保存与读取功能示例的相关文章

Android实现文件的保存与读取功能示例_Android

本文实例讲述了Android实现文件的保存与读取功能.分享给大家供大家参考,具体如下: 注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径 getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache 1. 编写文件读取与写入功能实现类 FileServi

Android采用File形式保存与读取数据的方法_Android

本文实例讲述了Android采用File形式保存与读取数据的方法.分享给大家供大家参考,具体如下: 将数据直接以文件的形式保存在设备中,通过Context.openFileInput()方法获得标准的JAVA文件输入流(FileInputStream),通过Context.openFileOutput()方法获得标准的JAVA文件输出流(FileOutputStream) 写数据到file文件中 findViewById(R.id.file).setOnClickListener(new But

Android采用File形式保存与读取数据的方法

本文实例讲述了Android采用File形式保存与读取数据的方法.分享给大家供大家参考,具体如下: 将数据直接以文件的形式保存在设备中,通过Context.openFileInput()方法获得标准的JAVA文件输入流(FileInputStream),通过Context.openFileOutput()方法获得标准的JAVA文件输出流(FileOutputStream) 写数据到file文件中 findViewById(R.id.file).setOnClickListener(new But

Android编程实现定时发短信功能示例

本文实例讲述了Android编程实现定时发短信功能.分享给大家供大家参考,具体如下: 第一,要实现发短信的功能,必须要用到android系统中发短信的权限,即在AndoridManifest.xml中添加如下内容 <uses-permissionandroid:name="android.permission.SEND_SMS"/> 第二,使用AlarmManager来实现一个倒计时的功能,当时间到时发送短   信.AlarmManager有两个相似的用法: 1.在指定时常

Android编程实现对话框形式进度条功能示例

本文实例讲述了Android编程实现对话框形式进度条功能.分享给大家供大家参考,具体如下: MainActivity代码如下: package com.example.myapplication; import android.app.ProgressDialog; import android.content.DialogInterface; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; i

Android编程实现的短信编辑器功能示例

本文实例讲述了Android编程实现的短信编辑器功能.分享给大家供大家参考,具体如下: 修改短信数据库,从而生成任意手机号发送的短信. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ex

Android编程实现对话框Dialog背景透明功能示例

本文实例讲述了Android编程实现对话框Dialog背景透明功能.分享给大家供大家参考,具体如下: 先看效果: 这是我做的一个拨号器强的面板,拨号的时候会查询手机中的联系人,显示在拨号面板上方,点击弹出透明对话框供选择. 这次重点是透明对话框. 先看对话框的theme,style文件: <?xml version="1.0" encoding="utf-8"?> <resources> <style name="select

Android编程实现的自定义弹窗(PopupWindow)功能示例

本文实例讲述了Android编程实现的自定义弹窗(PopupWindow)功能.分享给大家供大家参考,具体如下: 在开发过程中,如果要弹出一个对话框,一般是使用AlertDialog,但其使用限制太大,灵活性不够,所以我们常需要用到灵活性更高的PopupWindow, 如图,当点击显示的时候,就会弹出一个对话框,当点击确定或屏幕其它任意地方,就可以将PopupWindow取消了,接下来贴出重要代码. PopupWindow pw = new PopupWindow(view.getContext

Android编程实现分页加载ListView功能示例

本文实例讲述了Android编程实现分页加载ListView功能.分享给大家供大家参考,具体如下: package eoe.listview; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import andr