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.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...
随机推荐
- Linux重复执行上条命令
Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行.2.按 !! 并回车执行.3.输入 !-1 并回车执行.4.按 Ctrl+P 并回车执行.
- android 源码编译中的错误 解决
1.编译种错误提示: arm-none-linux-gnueabi-gcc: directory: No such file or directory arm-none-linux-gnueabi-g ...
- Hibernate、Mybatis 通过数据库表反向生成java类和配置
一.通过MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件 (转载孙宇老师的文章) 二.Mybatis生成实体类和配置文件: myeclipse下生 ...
- Spring InitializingBean and DisposableBean example
In Spring, InitializingBean and DisposableBean are two marker interfaces, a useful way for Spring to ...
- Socket连接与HTTP连接
我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP.FTP.T ...
- MemCacheManager
#region Fields private AreaRepository _areaRepository = new AreaRepository(); private ICacheManager ...
- NOSQL之旅---HBase
最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL数据库,最终决定采用HBase.在这里,我就向大家分享一下自己对HBase的理解. 在说HBase之前,我想再唠叨几句.做互联网应 ...
- 插入三层treeview代码
#region treetView加载 private void treeViewLoad() { DataView dv = navds.tbSiteKind.AsDataView(); treeV ...
- MT4平台上mql4实现的基于macd指标的智能交易EA
屌丝命苦,拼爹拼不过,拼后台没有,技术宅一枚,情商有问题,不会见人说人话见鬼说鬼话,所以在国庆熬着混着,工作也没啥大起色,想想就郁闷,难不成一辈子就只能这样了? 苦思冥想,想得一条路,那就是程序化交易 ...
- contiki-main.c 中的process系列函数学习笔记 <contiki学习笔记之六>
说明:本文依然依赖于 contiki/platform/native/contiki-main.c 文件. ---------------------------------------------- ...