【Android数据存储】- File

个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max

读写本应用程序数据文件夹中的文件

此种方法读写的文件在/data/data/<应用程序包名>中

android
中提供了 openFileInput(String fileName) 和 openFileOutput(String
fileName, int mode) 两个方法来读取本应用程序数据文件夹中的文件和向其写入。

openFileInput(String fileName) 
  打开文件输入流

openFileOutput(String fileName, int mode)    打开文件输出流

注:openFileOutput(String fileName, int mode)
中的参数 mode 指定文件打开的形式:

MODE_PRIVATE :该文件只能被当前程序读写

MODE_APPEND :以追加的模式打开文件,应用程序可以向文件中追加内容

MODE_WORLD_READABLE
:该文件的内容可以被其他应用程序读取

MODE_WORLD_WRITEABLE
: 该文件的内容可以被其他应用程序读和写

实例:

本实例程序界面上文件输入部分有一个输入框和一个按钮,点击按钮可以将输入框中输入的信息写入到指定的文件中去;读取部分有一个文本框和一个按钮,点击按钮文本框会显示指定文件中的内容。

读取:                                                   写入:

验证写入:

实例代码:

package com.example.filedemo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 *
 * @author CSUMax
 * @version 1.0 2014-4-24
 */
public class MainActivity extends Activity {

	private Button bt_main_in; // 写入文件按钮
	private Button bt_main_out; // 读取文件按钮
	private EditText et_main_in;// 输入文本框
	private TextView tv_main_out;// 显示文件内容

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		bt_main_in = (Button) this.findViewById(R.id.bt_main_in);
		bt_main_out = (Button) this.findViewById(R.id.bt_main_out);
		et_main_in = (EditText) this.findViewById(R.id.et_main_in);
		tv_main_out = (TextView) this.findViewById(R.id.tv_main_out);

		// 点击按钮将输入框中的内容写到文件中
		bt_main_in.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String fileName = "demo.txt";
				String text = et_main_in.getText().toString();
				writeToFile(text, fileName);
				et_main_in.setText("");
			}
		});

		// 点击按钮将文件中内容读取出来显示在文本框中
		bt_main_out.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String fileName = "demo.txt";
				tv_main_out.setText(readFromFile(fileName));
			}
		});

	}

	/**
	 * 读取文件
	 *
	 * @param fileName
	 * @return
	 */
	public String readFromFile(String fileName) {

		try {
			FileInputStream fis = openFileInput(fileName);
			byte[] bytes = new byte[1024];
			StringBuffer sb = new StringBuffer();
			int i = 0;
			i = fis.read(bytes);
			if (i > 0) {
				sb.append(new String(bytes, 0, i));
			}
			return sb.toString();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 * 写入文件
	 *
	 * @param text
	 *            写入的内容
	 * @param fileName
	 *            目标文件的文件名
	 */
	public void writeToFile(String text, String fileName) {
		try {
			// MODE_APPEND模式写入,即追加模式
			FileOutputStream fos = openFileOutput(fileName, MODE_APPEND);
			PrintStream ps = new PrintStream(fos);
			ps.println(text);
			ps.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

程序中的 demo.txt 文件可以通过 File Explorer 中 /data/data/<应用程序包名>/files/demo.txt
看到,如下图所示(由于无关文件较多,故分开截成两幅图了):

读取资源文件中的文件

此处以读取 resource 的 raw 中文件为例,在 res 文件夹下新建一个 raw 文件夹,将之前的 demo.txt 文件复制进去。

主要代码:

public class ReadFileUtil {
    public static String readFromRaw(Context context, int id) {
        String str = "";
        try {
            // 得到输入流
            InputStream is = context.getResources().openRawResource(id);
            int length = is.available();
            byte[] bytes = new byte[length];
            int i = 0;
            i = is.read(bytes);
            if (i > 0) {
                // 设置编码
                str = EncodingUtils.getString(bytes, "UTF-8");
            }
            is.close();
            return str;
        } catch (Exception e) {
            // TODO: handle exception
        }
        return null;
    }
}

测试代码:

public class ReaderTest extends AndroidTestCase {
    private static final String TAG = "ReaderTest";
    public void testReadFromRaw() {
        Log.i(TAG, "---------------");
        String str = "Failed";
        str = ReadFileUtil.readFromRaw(getContext(), R.raw.demo);
        Log.i(TAG, "========>" + str + "<========");
    }
}

注:资源文件下的文件通过 R 文件中确定的 id 来访问,如此处 R.raw.demo 

读写 SD 卡上的文件

有时候我们会把一些数据存储在SD卡上,现在我们来模拟一下,在 File
Explorer 视图中向/mnt/sdcard/目录下添加之前的 demo.txt 文件,现在试着读取该文件中信息并向其中写入信息。

主要代码:

public class ReadFileUtil {

    public static String readFromSdcard(String fileName) {
        String str = "";
        try {
            FileInputStream fis = new FileInputStream(fileName);
            int length = fis.available();
            byte[] bytes = new byte[length];
            int i = 0;
            i = fis.read(bytes);
            if (i > 0) {
                // 设置编码
                str = EncodingUtils.getString(bytes, "UTF-8");
            }
            fis.close();
            return str;
        } catch (Exception e) {
            // TODO: handle exception
        }
        return null;
    }
    /**
     * --注意向SD卡中的文件写入信息时,要在AndroidManifest.xml文件中加入相应的权限--
     */
    public static void writeToSdcard(String text, String fileName){
        try {
            //构造方法的第二个参数表示追加模式
            FileOutputStream fos = new FileOutputStream(fileName, true);
            byte[] bytes = text.getBytes();
            fos.write(bytes);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

测试代码:

public class ReaderTest extends AndroidTestCase {
    private static final String TAG = "ReaderTest";

    public void testReadFromSdcard() {
        Log.i(TAG, "---------------");
        String str = "Failed";
        str = ReadFileUtil.readFromSdcard("/mnt/sdcard/demo.txt");
        Log.i(TAG, "========>" + str + "<========");
    }

    public void testWriteToSdcard() {
        Log.i(TAG, "---------------");
        String text = " Max ";
        ReadFileUtil.writeToSdcard(text, "/mnt/sdcard/demo.txt");
    }
}

注:

一般读写本应用程序中的文件要使用 openFileInput 和 openFileOutput
;而读写 SD 卡中的文件需要使用 FileInputStrea 和 FileOutputStream 。

默认对SD卡中文件只有可读权限,所以向SD卡中写入数据时需要加入相应的权限。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

***************************************************************************

*  转载请注明出处:  @CSU-Max   http://blog.csdn.net/csu_max 
    *

***************************************************************************

【Android数据存储】- File,布布扣,bubuko.com

时间: 2024-12-09 07:35:09

【Android数据存储】- File的相关文章

Android数据存储(2):Internal Storage

Android数据存储的第二种形式是Internal Storage,即内部存储. 内存存储的特点是存储的是私有数据,其存储位置是在手机内存,一种是普通的文件存储,另一种是文本或图片在内存的缓存. 内部缓存的存放位置/data/data/包名/files 或 /data/data/包名/cache 1.create and write a private file to the internal storage: 步骤: 1)调用 openFileOutput()方法,返回的是一个FileOut

Android数据存储技术五大方式总结

本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据     适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口令密码等

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

android数据存储_内部存储

源码下载(免下载积分):下载 你可以直接存储数据到内部存储中,默认情况下,文件存储到内部存储中是私有的,不能被 其他程序访问,当卸载应用程序,这些文件会被移除. 创建并写入数据可以有两种方法: 使用java中的相关的方法, 使用android.content中的相关方法,  调用 openFileOutput(),并返回FileOutputStream对象 调用FileOutputStream对象的write()方法 关闭流 读文件也是基本相同的方式. 在读文件有一点小技巧:如果想在编译时保存一

android 数据存储的几种方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理. 对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络.但从开发者的

android数据存储_外部存储

源码下载(免下载积分):下载 外部存储并不是一定可以访问的,例如外部存储挂载到电脑上是,或者是SD Card作为外部存储,被移除是,因此在访问外部存储时,一定要保证外部存储是可以获得的.判断外部存储是否已经挂载到了手机上可以这样判断: //判断外部存储是否可以访问,并且可以读写 private boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Enviro

10、Android数据存储

课程目标: 掌握Android中数据存储的几种方式 熟练使用PreferenceActivity&PreferenceScreen做专业的Setting功能 熟练使用SQLite3来存储数据 深入研究SQLite3数据库特性,并且比对与大型数据库的包括存储过程,主外键关联等特性 了解文件存储的内外存储分别  了解网络存储C/S结构原理 . 重点难点:SQLiteOpenHelper类的使用   SQLIte数据库的特性掌握 考核目标: 说出Android数据存储的几种形式 ? Sqlite3能支

Android数据存储 如何搞定SQLite Database

转载请注明出处:明桑Android 在Android平台下有各种不同方法可以实现应用程序数据的存储和管理(SharedPerferences,File,SQLiteDatabase,网络存储),方法的选择依赖于需要存储的数据类型和数据结构.SQLite数据库能够安全而有效地解决结构化数据的存储问题: 这里主要介绍SQLite相关的用法,以及对数据库常见操作的封装. 最后,作为一个综合案例,做一个简单的学生管理的demo,创建student.db,包括name,grade字段,实现增.删.改.查的

【Android的从零单排开发日记】之入门篇(八)——Android数据存储(下)

废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基于数据库的应用.Android的数据库应用,依托于当下最流行的开源嵌入式数据库SQLite.在Android中,应用的数据库文件是该应用私有的,存储在应用数据目录下的databases子目录内.从代码结构来看,Android的数据库实现可以分成两个层次,在底层通过C++调用SQLite的接口来执行S