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.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...
随机推荐
- oracle 10g
一.安装系统 首先安装Linux系统,根据Oracle官方文档的建议,在机器内存小于1G的情况下,swap分区大小应该设置为内存的2倍大,若内存大于2G则swap分区设置为与内存大小一样. 为防止Or ...
- Oracle中纵横表的转化
横表就是普通的建表方式,如一个表结构为:主键.字段1.字段2.字段3......如果变成纵表后, 则表结构为:主键.字段代码.字段值.而字段代码则为字段1.字段2.字段3. 纵表对从数据库到内存的映射 ...
- Spring Auto-Wiring Beans
In Spring framework, you can wire beans automatically with auto-wiring feature. To enable it, just d ...
- Spring入门(5)-自动装配Bean属性
Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...
- MS-SQL Server字符串处理函数大全
MS-SQL Server字符串处理函数大全 select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.Index ...
- fedora21发布与新功能介绍(附fedora21安装教程与fedora21下载地址)
fedora21发布与新功能介绍(附fedora21安装教程与fedora21下载地址) 最新的Fedora 21终于正式发布了,Fedora Server 是一款强大可定制化的操作系统,包括了最好最 ...
- 最长不下降子序列nlogn算法详解
今天花了很长时间终于弄懂了这个算法……毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习. 解决的问题:给定一个序列,求最长不下降子 ...
- C#中动态加载和卸载DLL
在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载.在C#中我们也能使用Assembly.LoadFile实 ...
- MFC视图切换大全总结
单纯视图之间的切换 单文档多视图切换是我在学习MFC中遇到的一个老大难问题,在今天总算是一一破解了.我觉得视图切换分为三个等级,第一是在未切分窗格的情况下切换视图类:第二是在分割窗格的一个窗格内实行视 ...
- C++访问权限
1.C++类本身没有访问权限的概念,就是class Base. 2.类成员的访问权限有:public.protected.private 3.类的继承方式有:public.protected.priv ...