一、基本概念

在Android应用中保存文件,保存的位置有两处

①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录

②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录

保存的位置通过android的file explorer视图可以找到

二、例子

public class FileService
{
 
 private Context context;

public FileService(Context context)
 {
  super();
  this.context = context;
 }

@SuppressWarnings("static-access")
 public void save(String filename, String fileContent) throws Exception
 {
  FileOutputStream fos = context.openFileOutput(filename, context.MODE_PRIVATE); // 默认保存在手机自带的存储空间
  fos.write(fileContent.getBytes("UTF-8"));
  fos.close();
 }

public void saveInSDCard(String filename, String fileContent) throws Exception
 {
  // 若文件被保存在SDCard中,该文件不受读写控制
  File file = new File(Environment.getExternalStorageDirectory(), filename);
  FileOutputStream fos = new FileOutputStream(file);
  fos.write(fileContent.getBytes("UTF-8"));
  fos.close();
 }

public String read(String filename) throws Exception
 {
  FileInputStream fis = context.openFileInput(filename); // 默认到手机自带的存储空间去找
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  // 将内容读到buffer中,读到末尾为-1
  while ((len = fis.read(buffer)) != -1)
  {
   // 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用
   outStream.write(buffer, 0, len);
  }
  // 取内存中保存的数据
  byte[] data = outStream.toByteArray();
  fis.close();
  String result = new String(data, "UTF-8");
  return result;
 }
}

MainActivity

try
{
 // 存储在手机自带存储空间
 fs.save(filename, fileContent);
 Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();

// 存储在外部设备SD卡
 // 判断SDCARD是否存在和是否可读写
 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
 {
  fs.saveInSDCard(filename, fileContent);
  Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();
 }
 else
 {
  Toast.makeText(getApplicationContext(), R.string.failsdcard, Toast.LENGTH_SHORT).show();
 }

}
catch (Exception e)
{
 Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_SHORT).show();
 Log.e(tag, e.getMessage());
}

文件名不带路径,直接输入如xy.txt

对于SD卡的操作,需要在AndroidManifest.xml加入权限

三、一些API

①Environment.getExternalStorageDirectory()获取的路径为mnt/sdcard目录,对于android1.5,1.6的路径是sdcard目录
②Activity中提供了两个API

getCacheDir()获取的路径为data/data/应用包名/cache目录

getFilesDir()获取的路径为data/data/应用包名/files目录

http://blog.sina.com.cn/s/blog_67aaf44401015vla.html

Android开发5——文件读写的更多相关文章

  1. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...

  2. Android中的文件读写总结

    在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以 ...

  3. Android开发4——文件操作模式

    一.基本概念 // 上下文对象private Context context; public FileService(Context context){ super(); this.context = ...

  4. 【转】Android SDCard操作(文件读写,容量计算)

    android.os.Environment 提供访问环境变量 java.lang.Object     android.os.Environment   Environment 静态方法: 方法 : ...

  5. android开发布局文件imageview 图片等比例缩放:

    ImageView的属性scaleType,如果等比缩放的话,就使用CenterInside,如果想固定大小的话,就CenterCrop <?xml version="1.0" ...

  6. Android 数据存储-文件读写操作

    本来已经写了一部分,后来发现这篇博客写的比我的好,就直接引用一下: https://www.cnblogs.com/LiHuiGe8/p/5604725.html

  7. 吴裕雄--天生自然C语言开发:文件读写

    #include <stdio.h> int main() { FILE *fp = NULL; fp = fopen("/tmp/test.txt", "w ...

  8. android开发SDcard 响应的文件相关处理(一)

    android开发相关文件类的处理工具类: package com.gzcivil.utils; import java.io.File; import java.util.ArrayList; im ...

  9. Android数据存储-文件操作

    一.预备知识 1.Android中的MVC设计模式 MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计 ...

随机推荐

  1. spring boot xml与dao 映射关系

    mybatis的xml路径要和 dao的路径一模一样 dao 用@Mapper 注解

  2. linux cp覆盖每次都有提示

    1.cp命令,目标已经存在,每次都提示是否覆盖,怎么办? 2.cp --help 可以看到选项-i的时候,才会提示,但是这里并没有-i,为什么每次都有提示? 3.原因是:这里执行的cp是一个别名,通过 ...

  3. Discuz常见大问题-如何允许用户插入视频-如何允许用户在编辑帖子的时候带标签,允许用户插入视频

    在用户-用户组中,切换到会员用户组或系统用户组,可以勾选批量编辑前面的方框,然后点击批量编辑 点击论坛相关-帖子相关(默认是基本设置,你可以在这里设置所有用户的所有权限),然后把你要设置允许的用户的组 ...

  4. GP开发示例:数据库去重

    这个例子专业讲解基于ArcEngine使用GP开发的过程及遇到的问题.更多GP使用方法:GP使用心得 功能需求:现在外业第一次数据(简称调绘.mdb)和第二次数据(简称检查.mdb)有重复.第二次是在 ...

  5. Java高并发syncronized深入理解

    1.Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果. 2.地位: 1)Synchronized是java的关键字,并java的怨言原生支持: ...

  6. Cocos2d-x Touch事件处理机制

    在Cocos2d-x中提供两种触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate. 一.如何使用 0.默认情况下CCLayer都是没有启动 ...

  7. Java的代理模式(通过公共接口实现)

    代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,和代理子类.我们要操作的是目标子类里的方法,而很多时候,我们需要为目录子类中的方法增加额外的处理,如果增加日志功能.条件判断等, ...

  8. 〖Linux〗Ubuntu 64位安装sqlite3_analyzer

    1. 安装过程 -dev:i386 wget -c "http://www.sqlite.org/2013/sqlite-analyzer-linux-x86-3080200.zip&quo ...

  9. 如何让history命令显示最近所执行过的命令的具体执行时间

    如何让history命令显示最近所执行过的命令的具体执行时间. 步骤如下: 1.以ROOT用户编辑/etc/profile文件,在里面加入下面内容(我一般习惯在最末尾加): export HISTTI ...

  10. HDUOJ-----1556Color the ball

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...