android 数据的存储和访问以及单元测试的引入
来源:互联网 发布:小米网络短信设置 编辑:程序博客网 时间:2024/06/05 02:08
android 提供的5种数据存储方式
文件(Java SE中的IO技术)
SharedPreferences(参数)
SQlite数据库
Content Provider(内容提供者)
网络
1.文件存储方式
IO技术简单介绍:
数据流的划分:输入流(InputStream)和输出流(OuputStream)[按留香划分];;;字符流(如FileReadr,FileWriter,BufferedReader,BufferedWriter)和字节流(如FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream)[按数据内容划分]
注意:当从内存向文件中写入数据位输出流,从文件中读取数据到内存为输入流(进内存为输入,出内存为输出)
andorid存储空间:android自带的存储空间,自带存储空间较小(类似电脑自带的硬盘)和外存储设备SDCard(类似U盘等)一般外存储设备比自带存储空间大
2.保存文件的代码(这里为保存数据到手机自带的存储空间)
/** * 保存文件 * @param filename 文件名 * @param content 文件内容 * @throws Exception 抛出异常 */
public class FileService {private Context context;public FileService(Context context){this.context=context;}public void save(String filename, String content) throws Exception {//私有操作模式,创建的文件只能被应用本身访问,其他应用无法访问,写入的文件覆盖原文件内容OutputStream outStream=context.openFileOutput(filename, context.MODE_PRIVATE);outStream.write(content.getBytes());outStream.close();}}
openFileOutput的说明:
Open a private file associated with this Context's application package for writing. Creates the file if it doesn't already exist.
//打开一个用来写文件的与当前上下文的应用的包相关私有文件,如果文件不存在就创建新的
Parameters
//文件名不能包含路径,因为文件保存在默认的文件路径下(与应用的包名有关,见下文文件的保存位置图片)
MODE_PRIVATE
for the default operation,MODE_APPEND
to append to an existing file,MODE_WORLD_READABLE
andMODE_WORLD_WRITEABLE
to control permissions.Returns
- FileOutputStream Resulting output stream.
对于文件操作模式Context.MODE_*的解释:
MODE_PRIVATE 私有模式:为默认的操作模式,文件为私有数据,只能被应用自身访问,该模式下写入的文件会覆盖原文件
MODE_APPEND 追加模式:文件存在,追加内容,文件不存在则创建新文件
MODE_WORLD_READABLE 只读模式
MODE_WORLD_WIRTEABLE 只写模式
实现可读写方法:
在openFileOutput方法中的mode参数中传人"MODE_WORLD_READABLE+MODE_WORLD_WIRTEABLE"
MainActivity部分:
public class AndroidIOActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn=(Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {EditText et=(EditText) findViewById(R.id.filname);EditText etc=(EditText) findViewById(R.id.content);String filename=et.getText().toString();String content=etc.getText().toString();FileService service=new FileService(getApplicationContext());try {service.save(filename, content);Toast.makeText(getApplicationContext(), "保存成功", 1).show();} catch (Exception e) {Toast.makeText(getApplicationContext(), "保存失败", 1).show();}}}); }}
运行界面及结果:
文件保存的默认位置:
/data/data/org.wx.test(应用的包名)/files/wx.txt(文件名)
3.读取文件的代码
/** * 从文件中读取数据 * @param filename文件名 * @return * @throws Exception 抛出异常 */public String read(String filename) throws Exception{InputStream in=context.openFileInput(filename);ByteArrayOutputStream out=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len=0;while((len=in.read(buffer)) != -1){out.write(buffer, 0, len);}return new String(out.toByteArray());}
4.使用单元测试测试
manifest引入类库和增加权限
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".AndroidIOActivity" > <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> <!-- 单元测试 --> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="org.wx.test" />
extends AndroidTestCase 类代码:
public class FileServiceTest extends AndroidTestCase {private static final String TAG="FILE_TEST_LOG";public void testRead() throws Throwable{FileService fs=new FileService(this.getContext());String result=fs.read("wx.txt");Log.i(TAG, result);}}
单元测试运行结果:
日志记录结果:
- android 数据的存储和访问以及单元测试的引入
- Android中数据的存储和访问
- Android数据存储和访问-书籍的增删改查
- Android数据存储和访问-书籍的增删改查
- Android数据存储和访问—书籍的增删检查
- 数据存储与访问之文件的存储和访问
- 单元测试&Logcat&数据存储&XML的序列化和解析
- android:数据的存储与访问----Sharedpreferences
- Android下的数据存储与访问
- android:数据存储和访问
- Android数据存储和访问
- android数据存储和访问
- Android 数据存储和访问
- Android数据存储和访问
- 海量数据的存储和访问解决方案
- Android数据存储和访问(SharedPreferences存储)
- SpringBoot21-springboot的数据访问-引入Docker
- Android的文件存储和访问
- TCP/IP概论
- 快速判断一个数是否是2的幂
- OpenGL图形管线和坐标变换
- linux 多线程
- Seam集成的定时器应用_基于Seam框架的后台定时执行服务 .
- android 数据的存储和访问以及单元测试的引入
- 【java】在Linux上apache2.2+tomcat6的整合
- Visual Studio 2010/WIN7配置openGL
- Ubuntu,Windows多系统启动顺序设置
- Android如何解析json数组对象
- linux非正常关机无法启动
- Qt 常用类 (8)—— QIcon
- 预处理,果然是预处理----小话c语言(5)
- 初识LazyPHP3!