android开发之路10(文件的读写)
1.安卓中文件的数据存储实例(将文件保存到手机自带存储空间中):
①MainActivity.java
public class MainActivity extends Activity implements OnClickListener{
private Button mButton;
private EditText etFilename;
private EditText etFileContent;
/**
* 文件的保存:
* 第一步:创建布局文件(包括文件名的填写,内容的填写);
* 第二步:在我们的主Activity中获取控件的对象,并给按钮设置监听器,用来完成获取填写内容,和保存文件的操作
* 第三步:通常我们都会将项目中的业务类放到service层中,因此我们需要创建业务类,并完成文件的写入功能
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
etFilename=(EditText) findViewById(R.id.filename);
etFileContent=(EditText) findViewById(R.id.filecontent);
String filename=etFilename.getText().toString();
String filecontent=etFileContent.getText().toString();
FileService service=new FileService(getApplicationContext());
try {
service.save(filename,filecontent);
Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_LONG);
e.printStackTrace();
}
}
}
②FileService .java
public class FileService {
private Context context;
public FileService(Context context) {
this.context = context;
}
//保存文件到手机内部存储
public void save(String filename,String filecontent) throws Exception{
/**
* FileOutputStream:文件输出流
* openFileOutput()方法中:
* 参数1.要保存的文件名称;参数2.保存文件的操作模式
* 这里我们使用私有操作模式,即创建出来的文件只能被本应用访问,其他应用无法访问该文件,
* 另外采用私有操作模式创建的文件,写入文件中的内容会覆盖源文件的内容
*/
FileOutputStream outputStream=context.openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(filecontent.getBytes());
outputStream.close();
}
//读取文件从手机内部存储
public String read(String filename) throws Exception{
//FileInputStream:文件输入流
FileInputStream inputStream=context.openFileInput(filename);
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=0;
while((len=inputStream.read(buffer)) != -1){
outputStream.write(buffer, 0, len);
}
byte[] data=outputStream.toByteArray();
return new String(data);
}
}
③单元测试类:FileServiceTest .java
public class FileServiceTest extends AndroidTestCase{
private static final String TAG="FileServiceTest";
//单元测试方法testSave()方法用来测试我们的save(String filename,String filecontent)方法是否有错
public void testSave() throws Throwable{
FileService service=new FileService(this.getContext());
service.save("456.txt", "sdfdgsdfasd");
Log.i(TAG, "成功");
}
//单元测试testRead()方法用来测试我们的read(String filename)方法是否有错
public void testRead() throws Throwable{
FileService service=new FileService(this.getContext());
String result=service.read("123.txt");
Log.i(TAG, result);
}
}
④清单文件AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rookie.test1"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<!--指定单元测试的唯一标识 -->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.rookie.test1"
android:label="testapp"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!--添加单元测试环境 -->
<uses-library android:name="android.test.runner"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
⑤布局文件activity_main.xml(省略)
2.安卓中文件的数据存储实例(将数据保存到手机的SD卡中)
要想将数据保存到sd卡中,我们首先要在清单文件中设置相关的使用权限,
如:
<!--在sd卡中创建文件与删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--往sd卡中写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后我们需要在上面的那个实例中的FileService.java添加一个方法,
用来保存文件到手机sdcard
public void saveToSDCard(String filename,String filecontent) throws Exception{
File file=new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream outputStream=new FileOutputStream(file);
outputStream.write(filecontent.getBytes());
outputStream.close();
}
然后我们需要在MainActivity.java文件中将之前重写的onClick()方法改写成:
@Override
public void onClick(View v) {
etFilename=(EditText) findViewById(R.id.filename);
etFileContent=(EditText) findViewById(R.id.filecontent);
String filename=etFilename.getText().toString();
String filecontent=etFileContent.getText().toString();
FileService service=new FileService(getApplicationContext());
try {
//判断sd卡是否存在,并可以读写
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
service.saveToSDCard(filename, filecontent);
Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), R.string.sd_error, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_LONG);
e.printStackTrace();
}
}
至此,我们已经完成了文件写入sd卡的功能代码,那么运行一下试试看吧!
android开发之路10(文件的读写)的更多相关文章
- android开发之路09(浅谈SQLite数据库01)
1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...
- android开发之路11(用SharedPreferences存储数据)
Android平台给我们提供了一个SharedPreferences类,实际上SharedPreferences处理的就是一个key-value(键值对),它是 一个轻量级的存储类,特别适合用于保存软 ...
- Intent的七大组件——Android开发之路5
------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...
- android开发之路12(android四大组件&Fragment&AsyncTask类)
一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...
- android开发之路13(实际开发常见问题及解决办法ING)
1.DDMS下无法浏览SDcard? 在做音乐播放器的时候,想通过eclipse中的DDMS视图将音频文件push到sd卡中,发现总是报错 :Failed to push selection: Rea ...
- android开发之路08(ListView&Adapter)
ListView控件介绍:用于将数据库中的数据或者网络中的数据通过列表的形式显示出来:ListView采用MVC模式将前端显示和后端数据进行分离. 也就是说,ListView控件在装载数据时并不是直接 ...
- android开发之路05
一.获取res资源文件下values中内容的方式: 1.string.xml文件-------------------------------> 取值方式:getResource().getSt ...
- android开发之路03
一.Activity1.如何在一个应用程序中定义多个Activity:①定义一个类,继承Activity:②在该类当中,复写Activity当中的onCreate方法:③在AndroidManifes ...
- android开发之路02(浅谈BroadcastReceiver)
一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...
随机推荐
- <Stackoverflow> 如何提问
如何提问 欢迎来到Stack Overflow! 我们很乐意帮助你,但是实际情况是并非每一个问题都能得到解决.为了提高你的机会,这儿有一些帮助: 1 检索及调查 在提出你的问题之前,你已经通过检索来寻 ...
- boosting和bagging
首先来说明一下bootstraps:可以把它认为是一种有放回的抽样方法. bagging:boostraps aggregating(汇总) boosting:Adaboot (Adaptive Bo ...
- CentOS安装XRDP实现远程桌面访问
1.配置环境: yum install gcc pam-devel openssl-devel -y 2.进入指定目录下载并解压xrdp: 先安装 wget; sudo yum -y install ...
- 设置mysql 在mac中的环境变量
在mac os的用户目录下有一个隐藏文件.bash_profile,编辑它就可以完成环境变量的创建. 比如要将mysql的运行目录加到环境变量中,可以在.bash_profile中新增如下一行: ex ...
- CodeForces 455B A Lot of Games (博弈论)
A Lot of Games 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/J Description Andrew, Fedo ...
- BestCoder Round #68 (div.2) geometry(hdu 5605)
geometry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- ASP.Net自定义重写Http Server标头
Net中我们为了安全或其他原因起见 可能需要修改我们的标头报文等 以下方法我们通过使用HTTP Module来使用编程的方式来去除或修改它 首先我们自定义一个类CustomServerHeaderMo ...
- 一、Microsoft Dynamics CRM 4.0 SDK概述
Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...
- Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location] 的解决方式
1.添加网上所说的struts2 plugin jar包 2. <!-- Struts2配置 --> <filter> <filter-name>struts2&l ...
- Unity3D之移植学习笔记:移植到Android平台更好的方法
接上文,之前我们采用了直接将Unity项目导出为Eclipse项目来修改的方式,这种做法存在的一个最大的问题就是:每当Unity被修改之后,都需要重新导出,而每次导出的项目在Android平台方面的J ...