关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:存放在/data/data/<package name>/files下。
下面根据个小例子来更好的理解文件存储:
阶段一:进行界面布局(如下图)
具体代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@string/title" />
<EditText
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@string/content" />
<EditText
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scrollbars="vertical" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save" />
</LinearLayout>
</LinearLayout>
阶段二:业务层FileService
package com.lks.service;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
public class FileService {
private Context context;
public FileService(Context context) {
super();
this.context = context;
}
//存储数据到文件
public void save(String title, String content) throws Exception {
FileOutputStream fos;
fos = context.openFileOutput(title, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
}
//存储数据到SDCard
public void saveTosdcard(String title,String filecontent) throws IOException{
//第1个参数指明sdcard的绝对路径
File file=new File("/mnt/sdcard", title);
FileOutputStream fos=new FileOutputStream(file);
//创建文件输出流
fos.write(filecontent.getBytes());
fos.close();
}
public String readFile(String title) throws IOException {
FileInputStream fis = context.openFileInput(title);
int len = 0;
byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();// 往内存中输出数据的
while ((len = fis.read(buffer)) != -1)// 如果数据量很大,第2次读取的数据有可能会把第1次读取的数据给覆盖掉
{
baos.write(buffer, 0, len);
}
byte[] data = baos.toByteArray();// 得到内存中的数据 以二进制存放的
baos.close();
fis.close();
return new String(data);// 根据二进制数据转换成所对应的字符串
}
}
阶段三:编写MainActivity,保存数据到手机。具体代码如下:
package com.lks.openfile;
import java.io.IOException;
import com.lks.service.FileService;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText titleText;
private EditText contentText;
private Button save;
private FileService fileService;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titleText = (EditText) this.findViewById(R.id.title);
contentText = (EditText) this.findViewById(R.id.content);
save = (Button) this.findViewById(R.id.save);
fileService = new FileService(MainActivity.this);
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
fileService.save(titleText.getText().toString(),
contentText.getText().toString());
Toast.makeText(MainActivity.this, R.string.save_success,
Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, R.string.save_fail,
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
如果是保存数据到SD卡,则MainActivity中对save组件进行处理应改为:
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
try {
fileService.saveTosdcard(
titleText.getText().toString(), contentText
.getText().toString());
Toast.makeText(MainActivity.this,
R.string.save_success, Toast.LENGTH_LONG)
.show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, R.string.save_fail,
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(MainActivity.this, R.string.save_fail,
Toast.LENGTH_LONG).show();
}
}
});
注:1.在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中<manifest>标签之后加入访问SDCard的权限如下:
<!--
在SDCard中创建与删除文件权限
-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--
往SDCard写入数据权限
-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.改进
为了让程序更加通用,尽量不用绝对路径。
File file=new
File(Environment.getExternalStorageDirectory(),filename);
分享到:
相关推荐
Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储),如项目包有问题请联系我谢谢
Android本地数据存储中的文件存储,写入,重写和删除Android中.txt格式的文件
android新手数据存储之文件存储 新建一个工程,依次添加EditText,Button,TextView,Button 2)点击第一个Button时,把EditText中输入的内容写入到文件中 3)点击第二个Button时,读出文件中的内容显示到TextView中
2.掌握各种文件存储的区别与适用情况; 3.了解SQLite数据库的特点和体系结构; 4.掌握SQLite数据库的建立和操作方法; 5.理解ContentProvider的用途和原理; 6.掌握ContentProvider的创建与使用方法。 源码和整个...
文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。 概述 文件存取的核心就是输入流和输出流。 Android文件的操作模式 文件的相关...
Android不需要文件存储权限将文件保存至手机,Android不需要文件存储权限将文件保存至手机
主要为大家详细介绍了Android存储字符串数据到txt文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式;数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越...
实验三 Android数据存储 一、实验目的及要求 (1) 掌握Android的SharedPreferences的使用 (2) 掌握在Android中使用SQLite的方法 二、实验内容及步骤 任务:根据下述要求实现对应程序 1、 根据所给界面1完成登入...
SharedFerences,SQLite 文件存储 等各类文件存储方式的事例。
利用数据存储的文件内部存储开发技术,实现了一个简易的备忘录,其功能模块包括保存备忘录、读取备忘录等。
主要介绍了Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用的相关资料,需要的朋友可以参考下
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的4种方式,分别是:1 使用SharedPreferences存储数据;2 文件存储数据;3 SQLite数据库存储数据;4 使用ContentProvider存储数据;
Android文件存储方式之openFileOutput与获取数据 ,更多请查看博客:http://blog.csdn.net/xiayiye5/article/details/79613896
要理解Android的文件存储,首先要明白Android是如何用什么方式获取和存入数据的。Android的文件操作都是通过流的方式进行的,即IO。Android的文件操作跟Java是一样的,文件操作分为输入流(InputStream)和输出流...
Android数据基本存储方式 SharedPreference SQL基本语句 SharedPreference SQLite 文件 内容提供者ContentProvider 网络存储
android 介绍使用文件如何对数据进行存储
老罗android视频开发源码和ppt 这是视频配套的源码与PPT, 分了不同的小包 老罗写的, 听说叫罗升阳。