Android开发5——文件读写
一、基本概念
在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——文件读写的更多相关文章
- 【Win 10 应用开发】文件读写的三种方案
本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...
- Android中的文件读写总结
在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以 ...
- Android开发4——文件操作模式
一.基本概念 // 上下文对象private Context context; public FileService(Context context){ super(); this.context = ...
- 【转】Android SDCard操作(文件读写,容量计算)
android.os.Environment 提供访问环境变量 java.lang.Object android.os.Environment Environment 静态方法: 方法 : ...
- android开发布局文件imageview 图片等比例缩放:
ImageView的属性scaleType,如果等比缩放的话,就使用CenterInside,如果想固定大小的话,就CenterCrop <?xml version="1.0" ...
- Android 数据存储-文件读写操作
本来已经写了一部分,后来发现这篇博客写的比我的好,就直接引用一下: https://www.cnblogs.com/LiHuiGe8/p/5604725.html
- 吴裕雄--天生自然C语言开发:文件读写
#include <stdio.h> int main() { FILE *fp = NULL; fp = fopen("/tmp/test.txt", "w ...
- android开发SDcard 响应的文件相关处理(一)
android开发相关文件类的处理工具类: package com.gzcivil.utils; import java.io.File; import java.util.ArrayList; im ...
- Android数据存储-文件操作
一.预备知识 1.Android中的MVC设计模式 MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计 ...
随机推荐
- spring boot xml与dao 映射关系
mybatis的xml路径要和 dao的路径一模一样 dao 用@Mapper 注解
- linux cp覆盖每次都有提示
1.cp命令,目标已经存在,每次都提示是否覆盖,怎么办? 2.cp --help 可以看到选项-i的时候,才会提示,但是这里并没有-i,为什么每次都有提示? 3.原因是:这里执行的cp是一个别名,通过 ...
- Discuz常见大问题-如何允许用户插入视频-如何允许用户在编辑帖子的时候带标签,允许用户插入视频
在用户-用户组中,切换到会员用户组或系统用户组,可以勾选批量编辑前面的方框,然后点击批量编辑 点击论坛相关-帖子相关(默认是基本设置,你可以在这里设置所有用户的所有权限),然后把你要设置允许的用户的组 ...
- GP开发示例:数据库去重
这个例子专业讲解基于ArcEngine使用GP开发的过程及遇到的问题.更多GP使用方法:GP使用心得 功能需求:现在外业第一次数据(简称调绘.mdb)和第二次数据(简称检查.mdb)有重复.第二次是在 ...
- Java高并发syncronized深入理解
1.Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果. 2.地位: 1)Synchronized是java的关键字,并java的怨言原生支持: ...
- Cocos2d-x Touch事件处理机制
在Cocos2d-x中提供两种触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate. 一.如何使用 0.默认情况下CCLayer都是没有启动 ...
- Java的代理模式(通过公共接口实现)
代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,和代理子类.我们要操作的是目标子类里的方法,而很多时候,我们需要为目录子类中的方法增加额外的处理,如果增加日志功能.条件判断等, ...
- 〖Linux〗Ubuntu 64位安装sqlite3_analyzer
1. 安装过程 -dev:i386 wget -c "http://www.sqlite.org/2013/sqlite-analyzer-linux-x86-3080200.zip&quo ...
- 如何让history命令显示最近所执行过的命令的具体执行时间
如何让history命令显示最近所执行过的命令的具体执行时间. 步骤如下: 1.以ROOT用户编辑/etc/profile文件,在里面加入下面内容(我一般习惯在最末尾加): export HISTTI ...
- HDUOJ-----1556Color the ball
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...