Android文件的保存(本地和SD卡)与读取
为什么80%的码农都做不了架构师?>>>
这个是资源的目录参考(看的时候一目了然):
首先是布局文件:
效果图:
代码部分:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextView android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/fileName"/><EditText android:id="@+id/fileNameEdit"android:layout_width="fill_parent"android:layout_height="wrap_content"/><TextView android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/fileContent"/><EditText android:id="@+id/fileContentEdit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:minLines="3"/><Button android:id="@+id/saveBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/save"/>
</LinearLayout>
类MainActivity.java代码:
package org.dyb.file;import org.dyb.service.FileService;import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
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 fileName;//文件名编辑器private EditText fileContent;//文件内容编辑器private Button save;//保存按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//从R中获取文件名资源fileName=(EditText) findViewById(R.id.fileNameEdit);//从R中获取文件内容资源fileContent=(EditText) findViewById(R.id.fileContentEdit);//保存按钮资源获取save=(Button) findViewById(R.id.saveBtn);//设置单击事件进行文件保存,使用内部类接口实现save.setOnClickListener(new SaveOnclick());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}//设置单击事件进行文件保存,使用内部类接口实现private class SaveOnclick implements View.OnClickListener{@Overridepublic void onClick(View v) {String fileNameString=fileName.getText().toString();String fileContentString=fileContent.getText().toString();//自定义FileService类并添加save方法,需要传入contentFileService fs=new FileService(MainActivity.this);try{//将文件保存在程序目录中fs.save(fileNameString, fileContentString);//将文件保存在SD卡中,去掉注释便可用if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){fs.saveToSDCard(fileNameString, fileContentString);}else{Toast.makeText(getApplicationContext(), "SD卡不存在或者写保护", Toast.LENGTH_SHORT).show();}Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();}catch(Exception e){Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();}}}
}
自定义的FileService类:
代码如下:文件默认写入程序的files中(文件一般在目录的data/data/程序包名/files/文件名,如果使用真机做测试,如果手机没有root并且该文件权限没有进行可读写设置,在eclipse中的DDMS中是打不开data目录的)
package org.dyb.service;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;import android.content.Context;
import android.os.Environment;public class FileService {private Context context;public FileService(){}public FileService(Context context){this.context=context;}//保存到SD卡public void saveToSDCard(String fileNameString,String fileContentString) throws Exception{//Environment.getExternalStorageDirectory()获取系统SD卡目录File file=new File(Environment.getExternalStorageDirectory(),fileNameString);FileOutputStream outStream=new FileOutputStream(file);outStream.write(fileContentString.getBytes());outStream.close();}public void save(String fileNameString,String fileContentString) throws Exception{//文件输出流//其中两个参数一个是文件名一个是文件的权限,Context.MODE_PRIVATE代表只允许本程序读写FileOutputStream outStream=context.openFileOutput(fileNameString,Context.MODE_PRIVATE);//以字节流传入outStream.write(fileContentString.getBytes());outStream.close();}public String read(String fileNameString)throws Exception{FileInputStream inStream=context.openFileInput(fileNameString);//内存字节数组输出流,主要先将每次读取的字节流存入到内存中然后在进行输出ByteArrayOutputStream outStream=new ByteArrayOutputStream();//每次读取1024byte[] buffer=new byte[1024];int len=0;while((len=inStream.read(buffer))!=-1){outStream.write(buffer, 0, len);}//把内存中的数据转换为字节流byte[] data = outStream.toByteArray();//转换成字符串返回return new String(data);}
}
测试类:FTest.java,主要测试文件的读取,
代码如下:
package org.dyb.test;import org.dyb.service.FileService;import android.test.AndroidTestCase;
import android.util.Log;public class FTest extends AndroidTestCase {public void testread()throws Exception{FileService fs=new FileService(this.getContext());Log.i("junit", fs.read(<span style="color:#3366ff;">"d.txt"</span>));//文件名,自己可以修改我保存文件的时候用的是d.txt}
}
然后在AndroidManifest.xml进行配置单元测试:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="org.dyb.file"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="org.dyb.file.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><uses-library android:name="android.test.runner"/></application><!-- 在SD卡中写入权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 在SD卡中创建与删除权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="org.dyb.file" android:label="test for my app"/></manifest>
在日志输出过滤后就可以看到刚刚输入保存文件的内容
转载于:https://my.oschina.net/zjcx/blog/679574
Android文件的保存(本地和SD卡)与读取相关推荐
- Android笔记:保存Bitmap到SD卡中
之前一般是把ImageView转成Bitmap比较多,最近用到把Bitmap保存到本地,去网上看了看正好的记录下来吧, 直接贴代码: //String path,String picNamepubli ...
- android 访问存储卡,Android:无法访问存储在SD卡中的文件
我正在研究一个读取存储在SD卡(内部/数据/本地)中的.txt文件的应用程序.我遇到的问题是,它似乎可以访问文件路径,但它不能访问文件本身(尽管它具有读取和写入权限),但会引发FileNotFound ...
- Android—将Bitmap图片保存到SD卡目录下或者指定目录
直接上代码就不废话啦 一:保存到SD卡下 [java] view plain copy File file = new File(Environment.getExternalStorageDirec ...
- android 使用SAF框架操作外置sd卡
android 使用SAF框架操作外置sd卡 在 Android 4.4中,Google 对 SD卡 的访问已经做了严格的限制,在 Android 5.0中,开发者可以使用 新API 要求用户对某个指 ...
- java 读取rom文件_Android -- 读写文件到内部ROM,SD卡,SharedPreferences,文件读写权限...
(内容整理自张泽华教程) 1. 概述 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过 ...
- [原创][连载].基于SOPC的简易数码相框 - Nios II SBTE部分(软件部分) - 从SD卡内读取图片文件,然后显示在TFT-LCD上...
实在很抱歉,时间紧张,我只讲怎样从SD卡内读取bin文件(二进制文件),然后现在TFT-LCD上. 准备工具 1. Image2Lcd.zip 操作步骤 步骤1 寻找或制作240x320的图片 简单起 ...
- U3d—通过CRL下载文件并保存本地___#三分有点码#专栏
U3d-通过CRL下载文件并保存本地三分有点码. void Start(){string path = Application.persistentDataPath + "/" + ...
- android 2.3 取内外置SD卡
在android2.3中 判断内置SD卡是否挂载: if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ...
- ZYNQ-使用HDMI显示器进行SD卡图片读取显示
学习内容 本文使用带有HDMI接口的显示器,构建图像视频显示的测试工程,利用VDMA进行传输图像视频数据,通过文件系统将SD卡中的照片读取出来然后在显示器显示. 开发环境 vivado 18.3&am ...
- SD卡数据读取Altium Designer下载
目录 一.SD卡数据读取 1.SD卡简介 2.代码实现 1.所用软件及硬件 2.SD卡实物连线 3.运行 二.Altium Designer下载及原理图绘制 1.Altium Designer软件安装 ...
最新文章
- windows系统中查看linux分区的三种方式
- 用go语言制作读取excel模板批量生成word工具
- Python Web框架学习【Flask】
- Eclipse新建项目里没有Web Project应该如何处理
- Web前端——JavaScript(dom文档对象模型)
- 不插网线 开机速度加快
- 基础 - 常见字符的ASCII码
- Android优美代码赏析:Snake游戏分析
- 快速排序_two-powinters思想
- 缓存与缓冲的区别 cache与buffer的区别
- SAP ERP常用事务代码和表
- 一般描绘性形容词_英语中描绘性形容词是指哪种形容词?
- 模拟爬虫下载QQ空间相册高清图片
- 为什么孩子上学越来越难了?
- 【CodingNoBorder - 07】无际软工队 - 求职岛:ALPHA 阶段测试报告
- linux环境安装部署RF+Jenkins+Git(非完整版)
- MATLAB下批量修改图片名称
- k叉树的性质_二叉树的性质总结.doc
- Linux系统关闭防火墙~
- Spring事务不生效的原因
热门文章
- 例3.1 括号匹配问题 - 九度教程第26题(栈的应用)
- 五脏六腑在脸上的反射区图片_“阳光运动场,亲子共成长”——赣县区白鹭乡中心幼儿园迎新年亲子趣味运动会...
- aact portable怎么用_“充电宝”用英语怎么说?可别说成“phone charger”!
- stm32产生100k时钟信号_stm32定时器时钟源时钟选择
- python编程从入门到实战抛出异常_文件和异常——python从编程入门到实践
- 计算机网络定义来源,计算机网络基础知识之计算机网络定义及其功能
- linux支持ext2格式吗,linux正统标准文件系统ext2详解
- TP5的类似TP3使用‘DEFAULT_THEME’的配置修改主题风格的方法,以及常见模板错误...
- 深圳试行“智能行人过街系统”,行人违规将被“拉出来示众”
- iphone:点击背景隐藏键盘