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

转载请注明:@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. 定位 absolute和relative比较

    absolute:脱离原来位置定位.是相对于最近的有定位的父级进行定位;如果没有有定位的父级元素,就相对文档进行定位 relative:保留原来位置进行定位,相对于自己原来的位置进行定位 下面举两个例 ...

  2. Linux制作本地yum

    首先在vm上安装centos 1.首先查看挂载光盘的位置:#df -h [root@lang ~]# df -hFilesystem                   Size  Used Avai ...

  3. Python Socket详细介绍

    Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号(默认为0)来创建套接字. socket类型 描述 socket. ...

  4. Android-Intent and Intent Filters

    1.intent(意图)可以用来创建启动3种类型的基本情况:①To start an activity:启动一个活动②To start an service③To start an broadcast ...

  5. HDU 1257 最少拦截系统(最长上升子序列)

    题意: 给定n个数, 然后要求看看有多少对不上升子序列. 分析: 求出最长上升子序列, 那么整个序列中LIS外的数都会在前面找到一个比自己大的数, 所以不上升子序列最多有最长上升子序列个数个. 关于求 ...

  6. InnoDB透明页压缩与稀疏文件

    此文已由作者王慎为授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MySQL 5.7中包括了很多让人耳目一新的新特性,其中就包括了InnoDB Transparent Pag ...

  7. STM32F407 串口通信实验 视频第27节 个人笔记

    前言 第26节也是串口,笔记链接在此:https://www.cnblogs.com/YuQiao0303/p/10019362.html github地址:https://github.com/Yu ...

  8. 大数据学习——hive函数

    1 内置函数 测试各种内置函数的快捷方法: 1.创建一个dual表 create table dual(id string); 2.load一个文件(一行,一个空格)到dual表 3.select s ...

  9. java数据结构简单点

    java常用的数据结构一 集合框架主要就是Collection和Map: 1.Collection包含了List和Set两大分支. (1)List是一个有序的集合,每一个元素都有它的索引.第一个元素的 ...

  10. hexo干货系列:(七)hexo安装统计插件

    前言 前面介绍了如何让百度和谷歌收录我们的博客,那如何查看自己的博客每天被多少人访问呢~ 这里我介绍下hexo中如何使用统计插件,每天看到自己的博客访问量越来越高也是一种享受. 正文 开启统计功能 我 ...