个人学习整理。如有不足之处,请不吝不吝赐教。

转载请注明:@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
: 该文件的内容能够被其它应用程序读和写
实例:
       本实例程序界面上文件输入部分有一个输入框和一个button。点击button能够将输入框中输入的信息写入到指定的文件里去;读取部分有一个文本框和一个button,点击button文本框会显示指定文件里的内容。

   读取:                                                   写入:     


   验证写入:



实例代码:
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; // 写入文件button
private Button bt_main_out; // 读取文件button
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); // 点击button将输入框中的内容写到文件里
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("");
}
}); // 点击button将文件里内容读取出来显示在文本框中
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 文件复制进去。
    

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3N1X21heA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">


    主要代码:
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的更多相关文章

  1. Android数据存储:File

    Android数据存储之File Files:它通过FileInputStream和FileOuputStream对文件进行操作.但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写 ...

  2. 10、Android数据存储

    课程目标: 掌握Android中数据存储的几种方式 熟练使用PreferenceActivity&PreferenceScreen做专业的Setting功能 熟练使用SQLite3来存储数据 ...

  3. Android - 数据存储 -存储文件

    Android使用的文件系统和其他平台的基本磁盘的文件系统很相似.这里将要介绍如何使用File API在Android文件系统中读写文件. File对象适合按顺序读写大量的数据.例如,适合图片文件或者 ...

  4. Android数据存储:SDCard

    Android数据存储之SDCard 0.获取sd卡路径. 1.讲述 Environment 类. 2.讲述 StatFs 类. 3.完整例子读取 SDCard 内存 0.获取sd卡路径 方法一: p ...

  5. Android数据存储:Shared Preferences

    Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式:1 ...

  6. 【Android开发日记】之入门篇(七)——Android数据存储(上)

    在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...

  7. 【Android开发日记】之入门篇(八)——Android数据存储(下)

    废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基 ...

  8. Android数据存储之SQLite数据库

    Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...

  9. Android数据存储之Shared Preferences共享数据存储

    Android数据存储之Shared Preferences共享数据存储 在Android中一共提供了4种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些 ...

  10. Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...

随机推荐

  1. NodeJs运行服务器-day01

    //读取内置模块http,这个模块开发服务器用的var http =require('http'); var server=http.createServer(function(req,res){ r ...

  2. OVOO

    题目描述: $zhx$有一个棵$n$个点的树,每条边有个权值. 定义一个连通块为一个点集与使这些点连通的所有边(这些点必须连通). 定义一个连通块的权值为这个连通块的边权和(如果一个连通块只包含一个点 ...

  3. MySQL安装示例数据库

    MySQL安装示例数据库 本文档演示如何下载及安装MySQL示例数据库sakila及employees数据库 1. 安装sakila数据库 1.1 下载sakila数据库 wget http://do ...

  4. c++_包子凑数

    标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会 ...

  5. c++_核桃的数量

    #include <iostream> using namespace std; int gcd(int x,int y){ int temp; ){ temp=x%y; x=y; y=t ...

  6. mysql异常Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'region_name'

    Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'region_name' insert语句加的该字段有汉字,乱码造成的 解 ...

  7. CactiI表结构和数据被动获取

    cacti我们也用了很久了,但是它的表结构一直都没有去关心过,得空抽了半个晚上的时间,把它的库表结构大概看了下,某些字段的含义跟大家分享下:cacti的数据都是存放在rrdtool中的,数据库存放的其 ...

  8. BNU 13174 Substring Frequency

    3C. Substring Frequency Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %lld      ...

  9. 服务器架构及实战(架构篇)- PHP建站

    概述 详解 PHP的环境搭建 PHP的帮助使用和配置文件 PHP的Hello World PHP的库函数调用 PHP的Web程序 PHP的函数和面向对象使用 PHP的数据库访问 Nginx安装和配置访 ...

  10. 【HDOJ6342】Expression in Memories(模拟)

    题意: 给定一个由0123456789+* ?组成的表达式,其中?可以被改为任意其它字符,问修改问号后是否有方案使得表达式合法 len<=5e2,sumlen<=1e5 思路: #incl ...