Android File存储
原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_File_store.html
一 概念
Android系统中提供了一种文件读写的方法,可以将一些数据以文件的形式保存在设备中。比如一些word文档,PDF文档,图片,音频,视频文件等。文件会保存在/data/data/<packagename>/files中。文件存储数据使用了Java中的IO操作来进行文件的保存和读取,Android在Context类中封装好了输入流和输出流的获取方法,我们使用这些封装好的方法进行文件的增删改查等操作,注意使用方法是在有上下文的环境中使用。
二 使用
1, 保存文件
保存文件需要获取输出流,将要保存的内容写入到我们自己规定文件名的文件中,方法如下:
FileOutputStream openFileOutput = openFileOutput(prefes1, prefes2);
获得输出流后,便可以将我们获取的文件直接写入,方法的第一个参数是我们要保存的文件名,注意文件的格式需要我们自己定义,即要写上后缀,这点不同于SharedPreferences保存数据自动生成Xml格式,需要注意。第二个参数是写入模式,共有以下几种:
Context.MODE_PRIVATE 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。
Context.MODE_APPEND 检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE 表示当前文件可以被其他应用读取。
MODE_WORLD_WRITEABLE 表示当前文件可以被其他应用写入。
在使用模式时,可以用"+"来选择多种模式,比如openFileOutput(FILENAME, Context.MODE_PRIVATE +
MODE_WORLD_READABLE);
2,
读取文件
可以使用系统提供的方法获取输出流实现读取,方法如下:
FileInputStream openFileInput = openFileInput(prefes);
其中的参数填入要读取的文件名
3,
删除文件
deleteFile(prefes);
其中的参数为要删除的文件名
4,
获取文件路径方法:
绝对路径:/data/data/<package
name>/files/filename
Context:Context.getFilesDir()可以获取到"/data/data/<package name>/files"
三 Android实例
1,布局和功能
①布局
布局如下图所示:
②功能
(以下描述控件的顺序按照上图的由上到下顺序)
保存文件功能:第一个EditText中写入要保存的内容,第二个EditText中写入要保存的文件名(注意加后缀),点击第一个按钮保存文件
读取文件内容功能:第三个EditText中写入要读取的文件名,点击第二个按钮,在第一个TextView中显示文件的内容
删除文件功能:在第四个EditText中写入要删除的文件名,点击第三个按钮,删除文件
2,主要代码
①MainActivity.java
package com.example.filestore; import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { private EditText et_save;
private TextView tv_read;
private EditText et_save_filename;
private EditText et_read_filename;
private EditText et_delete_filename; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); et_save = (EditText) findViewById(R.id.et_save);
tv_read = (TextView) findViewById(R.id.tv_read);
et_save_filename = (EditText) findViewById(R.id.et_save_filename);
et_read_filename = (EditText) findViewById(R.id.et_read_filename);
et_delete_filename = (EditText) findViewById(R.id.et_delete_filename);
} //设置保存点击事件
public void save(View v) {
//获得输入框中的内容 //非空判断
if(et_save.getText() == null || et_save.getText().length() <= 0 || et_save_filename.getText() == null || et_save_filename.getText().length() <= 0) {
Toast.makeText(getApplicationContext(), "文件名和输入内容不能为空", Toast.LENGTH_SHORT).show();
}else {
//获取待保存的文件名和保存内容
String content_save = et_save.getText().toString().trim();
String filename_save = et_save_filename.getText().toString().trim();
try {
//获取输出流
FileOutputStream openFileOutput = openFileOutput(filename_save, MODE_PRIVATE);
//使用输出流向文件中写入数据
openFileOutput.write(content_save.getBytes());
//关闭输出流
openFileOutput.close(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
//设置读取点击事件
public void read(View v) {
//首先清空上次残留的内容
tv_read.setText("");
//获取要读取的文件名
//非空判断
if(et_read_filename.getText() == null || et_read_filename.getText().length() <= 0) {
Toast.makeText(getApplicationContext(), "要读取的文件名不能为空", Toast.LENGTH_SHORT).show();
}else {
String filename_read = et_read_filename.getText().toString().trim(); try {
//获取输入流
FileInputStream openFileInput = openFileInput(filename_read);
//开始读取数据,为了展示内容使用内存输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024];
while((len = openFileInput.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
//读取完毕,关流
openFileInput.close();
//将内存输出流中的数据显示到界面上
tv_read.setText(baos.toString()); } catch (Exception e) {
// TODO Auto-generated catch block
//此处提示未找到文件
Toast.makeText(getApplicationContext(), "未找到文件", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
} }
//设置删除点击事件
public void delete(View v) {
//首先获取要删除的文件名
//非空判断
if(et_delete_filename.getText() == null || et_delete_filename.getText().length() <= 0) {
Toast.makeText(getApplicationContext(), "要删除的文件名不能为空", Toast.LENGTH_SHORT).show();
}else {
//获取要删除的文件名
String filename_delete = et_delete_filename.getText().toString().trim();
//删除数据
deleteFile(filename_delete);
} }
}
②activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="right"
android:orientation="vertical"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv_hint"
/>
<EditText
android:id="@+id/et_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv_hint2"
/>
<EditText
android:id="@+id/et_save_filename"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
/>
<Button
android:id="@+id/bt_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="save"
android:textSize="12sp"
android:text="@string/text_bt_save"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv_hint3"
/>
<EditText
android:id="@+id/et_read_filename"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/tv_read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/text_read" /> </ScrollView> <Button
android:id="@+id/bt_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:onClick="read"
android:text="@string/text_bt_read"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv_hint4"
/>
<EditText
android:id="@+id/et_delete_filename"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
/>
<Button
android:id="@+id/bt_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:onClick="delete"
android:text="@string/text_bt_delete"
/> </LinearLayout>
Android File存储的更多相关文章
- File存对象--android 的File存储到SD卡();
方法1:android File存对象--File存储到SD卡(); 1.保存对象到本地或SD卡需要注意的是,要保存的对象(OAuthV1)一定要实现了Serializable接口.实现了Serial ...
- android学习笔记46——File存储
File存储--IO操作文件 openFileOutput.openFileInput Context提供了如下两个方法来打开本应用程序的数据文件夹里面的文件IO流. 1.FileInputStrea ...
- Android数据存储:File
Android数据存储之File Files:它通过FileInputStream和FileOuputStream对文件进行操作.但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写 ...
- Android数据存储之Android 6.0运行时权限下文件存储的思考
前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...
- Android 媒体存储服务(一)
Android 媒体存储服务 本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 ...
- 10、Android数据存储
课程目标: 掌握Android中数据存储的几种方式 熟练使用PreferenceActivity&PreferenceScreen做专业的Setting功能 熟练使用SQLite3来存储数据 ...
- Android - 数据存储 -存储文件
Android使用的文件系统和其他平台的基本磁盘的文件系统很相似.这里将要介绍如何使用File API在Android文件系统中读写文件. File对象适合按顺序读写大量的数据.例如,适合图片文件或者 ...
- (数据存储)Android系统存储数据
移动设备需要存储数据,处理数据并输出处理后的信息. 主题一:存储键值对 If you have a relatively small collection of key-values that you ...
- Android数据存储:SDCard
Android数据存储之SDCard 0.获取sd卡路径. 1.讲述 Environment 类. 2.讲述 StatFs 类. 3.完整例子读取 SDCard 内存 0.获取sd卡路径 方法一: p ...
随机推荐
- O365(世纪互联)SharePoint 之使用Designer报错
前言 在SharePoint Online中使用Designer报错,错误为:This Feature has been disabled by your administrator.找了好久发现原因 ...
- Splash页面跳转主页面,去掉主页面标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE); // 去除标题,必须在setContentView之前调用
- get和post的区别
http://localhost:8080/shopc/check.do?username=zhangsan&pwd=123456 http://localhost:8080/shopc/ch ...
- CSS:@font-face的使用方法
1.介绍 @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当 ...
- Scala初入
何为Scala物 Scala为基于JVM虚拟机中的面向对象与函数式编程思想并且完全兼容Java的混合编程语言,可以是Scala与Java是同根同源的,既然Scala与JAVA都是基于JVM之上的编程语 ...
- 萌新笔记——封装hiredis——C++与redis对接(一)(string的SET与GET操作)
在菜鸟教程自学了redis,总想着像Mysql一样,在C/C++中进行对接.于是查询了一些资料,最后找到了hiredis.然而直接用它的话,难免有点不方便.于是,对其进行封装. hiredis直接去g ...
- linux分区机制(MBR GPT)简介
- JVM原理和优化
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...
- python下print结果到文件中的方法
目的是将print的结果输出到一个文件中,比如这个文件在D:\lianxi\out.txt下,我用的windows: s = '1234' f = open (r'D:\lianxi\out.txt' ...
- Neural Pathways of Interaction Mediating the Central Control of Autonomic Bodily State 自主神经系统-大脑调节神经通路
Figure above: Critchley H D, Harrison N A. Visceral influences on brain and behavior[J]. Neuron, 201 ...