`

android的数据存储和访问 附源码

阅读更多
android提供了几种文件的存储方式;
1.文件:
2.SharedPreferences存储类似软件的配置参数设置的内容;这是一个类;
3.sqlite数据库 android内嵌的数据库,和微软的excel数据库原理一样,当你创建一个数据库时是以文件的形式存放的;sql语句很类似的;
4.网络
5.content provider
/////////////////////////////////////////
我们使用mvc模式开发一个保存文件内容的程序,我们在j2ee的时候是面向接口编程,可以降低耦合,在android中还是尽量避免使用太多的类,一是效率 二是手机内存不大,内部类是个不错的选择
先写业务层DataManager.java
package cn.lee.Manager;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DataManager {
	/**
	 * 没有使用成员变量的方法可以定义为静态方法
	 * 保存数据的业务逻辑
	 * OutputStream 输出流
	 * content 文件内容
	 * @throws Exception 
	 */
	public static void saveDate (OutputStream outputStream , String contentString) throws Exception
	{
		outputStream.write(contentString.getBytes());
		outputStream.close();
	}
	/**
	 * 读取数据的业务逻辑
	 * @param InputStream
	 * @param contentString
	 * @throws Exception
	 */
	public static  String readDate (InputStream inputStream ) throws Exception
	{
		byte [] byte1 = new byte[1024];
		/**
		 * 当输入流读到文件的末尾 返回就是-1 
		 */
		int length = inputStream.read(byte1);
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
		if(length!=-1)
		{
			//读到的内容存在内存中ByteArrayOutputStream 这个类用于将byte流存储在内存中
			
			byteArrayOutputStream.write(byte1, 0, length);
		}
		String dateString =   byteArrayOutputStream.toString();
		byteArrayOutputStream.close();
		inputStream.close();
		return dateString;
	}
}


再来测试这个业务层DateManagerTest .java
package cn.lee.data;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

import cn.lee.Manager.DataManager;
import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log;

public class DateManagerTest extends AndroidTestCase {
	
	private static final String TAG="DateManagerTest";
	public void testSave ()throws Exception {
		/**
		 * 内容先定义成固定的内容
		 *  Activity的父类的父类就是context,context与其他框架中的context相同为我们以供了一些核心操作工具。
		 *  openFileOutput("fileName", Context.MODE_PRIVATE);
		 *  参数1:文件的名字 不能包含路径分隔符‘/’ 
		 *  使用这个方法创建的文件,会保存在手机/date/date/应用文件夹(这里就是cn.lee.data)/files目录下;
		 *  /date/date/cn.lee.data/files/fileName.txt 我们可以在window-show view -other-android-file explore看到
		 *  这是有android决定的;
		 *  参数2:保存的模式:  
		 *  使用context中的文件输出流它有四种模式:
		 *  文件读写的操作模式:
		 *      Context.MODE_PRIVATE=0:只能是当前的应用才能操作文件 如果创建的文件已经存在 新内容覆盖原内容
		 *      Context.MODE_APPEND=32768:新内容追加到原内容后 这个模式也是私有的 这个文件只能被创建文件的应用所访问
		 *      Context.MODE_WORLD_READABLE=1:允许其他应用程序读取本应用创建的文件
		 *      Context.MODE_WORLD_WRITEABLE=2:允许其他应用程序写入本应用程序创建的文件,会覆盖原数据。       		
		 */
		

        FileOutputStream fileOutputStream = this.getContext().openFileOutput("fileName.txt", Context.MODE_PRIVATE);
		DataManager.saveDate(fileOutputStream, "xxxxxxx");
	}
	public void  testRead() throws Exception{
		FileInputStream fileInputStream = this.getContext().openFileInput("fileName.txt");
		String contentString = DataManager.readDate(fileInputStream);
		Log.i(TAG, contentString);
	}
}


设计界面main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical" android:layout_width="fill_parent"
		android:layout_height="wrap_content">
		<TextView android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="@string/hello"
			android:id="@+id/filenameTesxwiew" />
		<EditText android:layout_width="60px"
			android:layout_toRightOf="@id/filenameTesxwiew"
			android:layout_alignTop="@id/filenameTesxwiew" android:layout_height="wrap_content"
			android:id="@+id/fileName" />
	</RelativeLayout>
	<TextView 
	android:layout_width="fill_parent"
	android:layout_height="wrap_content" 
	android:text="@string/contentlable" />
	<EditText
	android:layout_width="fill_parent"
	android:layout_height="wrap_content" 
	android:minLines="5"
	android:id="@+id/fileContent" />
	<Button 
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="@string/buttontext" 
	/>
</LinearLayout>

设计activity AboutDateActivity.java
package cn.lee.data;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import cn.lee.Manager.DataManager;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AboutDateActivity extends Activity {
	private EditText fileNameEditText;
	private EditText fileContentEditText;
	private Button button;
	private static final String TAGSTRING ="AboutDateActivity";

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		fileNameEditText = (EditText) this.findViewById(R.id.fileName);
		fileContentEditText = (EditText) this.findViewById(R.id.fileContent);
		button = (Button) this.findViewById(R.id.button);

		button.setOnClickListener(new OnClickListener() {
		
			public void onClick(View v) {
				int info = R.string.sus;
				String fileNameString = fileNameEditText.getText().toString();
				String fileContentString = fileContentEditText.getText()
						.toString();
				// TODO Auto-generated method stub
				FileOutputStream fileOutputStream = null;
				try {
					fileOutputStream = AboutDateActivity.this
							.openFileOutput(fileNameString, Context.MODE_PRIVATE);
					DataManager.saveDate(fileOutputStream, fileContentString);
					
				} catch (Exception e) {
					// TODO Auto-generated catch block
					Log.i(TAGSTRING, e.toString());
					info = R.string.infor;
				}finally{
					try {
						fileOutputStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						Log.i(TAGSTRING, e.toString());
						info = R.string.infor;
					}
				}
				Toast.makeText(AboutDateActivity.this, info, 1).show();
			}

		});
	}
}

你试试。
1
0
分享到:
评论
1 楼 struts_2010 2011-07-01  
感谢!

相关推荐

    android-数据存储(保存读取密码-附源码)

    在Android开发中,数据存储是不可或缺的一部分,...总之,这篇博文和源码提供了关于Android应用中安全存储和读取密码的方法,通过学习和实践,开发者可以更好地理解和掌握Android数据存储的策略,提高应用的安全性。

    Android数据存储和访问实验报告

    1.掌握SharedPreferences的使用方法; 2.掌握各种文件存储的区别与适用情况; 3.了解SQLite数据库的特点和体系结构;...源码和整个工程会上传到博客中,若有需要可下载。 该实验报告包含部分源码,和内容介绍。

    安卓Android源码——安卓Android学习——数据存储.rar

    本压缩包文件"安卓Android源码——安卓Android学习——数据存储.rar"显然是针对安卓数据存储机制的学习资料,其中可能包含了相关的源代码示例和讲解。下面我们将深入探讨安卓中的数据存储方法。 1. **Shared ...

    android数据存储集锦源码

    本资源“android数据存储集锦源码”提供了一个全面的示例,帮助开发者深入了解和实践Android平台上的各种数据存储方式。下面我们将详细探讨其中涉及的主要知识点。 首先,Android提供了多种数据存储方式,包括...

    android数据的存储与访问(数据保存mvc实现&访问权限源码

    总之,Android中的数据存储与访问是一个多层面的问题,涉及到多种技术的综合运用。通过理解和实践这些知识点,开发者可以更好地管理和保护应用数据,提升用户体验。在查看提供的源码时,需要理解每个部分的作用,以...

    Android实用大屏白板附源码

    10. **文件存储与读取**:Android提供了一系列API用于文件系统的访问,应用可能使用这些API来存储用户的绘图数据,比如保存为图片文件或自定义格式的文件。 以上是"Android实用大屏白板附源码"实例中涉及的主要知识...

    老罗android视频开发源码和ppt--android存储数据和文件.rar

    "老罗android视频开发源码和ppt--android存储数据和文件.rar"这个压缩包提供的是关于Android数据存储和文件操作的教学资源,包括视频课程和PPT讲义,由知名的Android讲师罗升阳(老罗)编撰。 首先,我们来看一下...

    Android应用源码之Android学习之数据存储

    在Android应用开发中,数据存储是一项至关重要的任务。Android提供了多种数据存储方式,以满足不同场景下的需求。本文将深入探讨Android应用中的数据存储...总的来说,这份源码将是你提升Android数据存储技能的好材料。

    Android简易本地音乐播放器源码,基于Android的简易本地音乐播放器源码

    5. **文件遍历与选择**:为了找到并播放本地音乐,源码可能包含了读取设备存储上的音乐文件(通常位于外部存储的Music目录),这需要使用到文件I/O操作和文件遍历的技巧。 6. **ListView或RecyclerView**:为了展示...

    安卓Android源码——学习之数据存储.zip

    在安卓(Android)开发中,数据存储是至关重要的一个环节,它涉及到应用程序如何持久化地保存用户数据、配置信息以及应用程序的...对于初学者来说,这是一个宝贵的资源,可以帮助他们掌握Android数据存储的核心概念。

    Android安卓仿微信最新版源码 微信APP源码.zip

    这篇详尽的文章将深入探讨基于Android的仿微信应用的源码结构、主要功能模块和关键技术。首先,我们从标题和描述中可以了解到,这是一份针对Android平台开发的微信应用程序的源代码,它旨在模仿微信的最新功能和用户...

    Android数据存储与访问(含源码加文档)

    1、练习使用SharedPreferences方式进行数据存储和访问 2、练习使用SQLite数据库的方式进行数据存储和访问 三、实验原理 数据存储方式,SharedPreferences,SQLite。 四、实验步骤及关键技术 一.本项目包含以下四个...

    Android程序研发源码Android 万年历源码.zip

    7. **Android权限管理**:访问系统日历通常需要请求READ_CALENDAR和WRITE_CALENDAR权限。源码会包含如何在Manifest中声明权限,以及在运行时动态请求权限的代码。 8. **Material Design风格**:遵循Android的设计...

    Android studio 运动健康管理系统源码.zip

    2. **数据存储**:源码中可能会涉及SQLite数据库或云存储服务,用于存储用户的个人信息、运动目标、历史记录等数据。 3. **传感器集成**:为了获取用户的运动数据,如步数、心率、距离等,系统需要与设备上的传感器...

    Android应用源码之数据的储存与读取.zip

    在Android应用开发中,数据的储存与...通过深入理解这些数据存储方法,开发者能更好地设计和实现Android应用,满足不同场景下的数据管理需求。源码分析和实践操作是提高技能的关键,建议结合提供的源码进行学习和实践。

    Android应用源码之23.数据存储(2).zip

    源码中可能展示如何在数据存储和UI更新之间建立连接。 通过研究这个源码包,开发者可以学习到如何根据需求选择合适的数据存储方式,并掌握实际操作中的技巧和最佳实践。同时,这也有助于理解Android应用的整个数据...

    基于Android的温湿度采集系统源码.rar_leftq82_基于Android的温湿度采集系统源码_温湿度_湿度_系统源码

    7. **数据存储与传输**:你可以选择将数据存储在本地SQLite数据库,或者利用SharedPreferences进行简单数据缓存。此外,考虑到物联网特性,可能还需要将数据发送到远程服务器,这涉及到网络编程,如使用...

    Android开发实现的导出数据库到Excel表格功能【附源码下载】

    知识点四:Android数据存储 在本文中,我们使用了SQLite数据库来存储家庭账单的数据。但是,SQLite数据库有一定的限制,例如数据量大时会出现性能问题。因此,在实际开发中,我们需要根据实际情况选择合适的数据...

    Android程序研发源码Android 记账本源码.rar

    7. **SharedPreferences**:轻量级的本地数据存储方式,常用于保存用户设置。源码可能使用它来存储用户的偏好,如默认货币或是否开启提醒。 8. **Intent**:用于在不同组件之间传递信息,例如从`MainActivity`启动...

    Android学习之数据存储.zip源码资源下载

    总结来说,这个"Android学习之数据存储.zip"源码资源提供了全面的数据存储技术实践,包括SQLite、SharedPreferences、文件系统、ContentProvider和网络存储的使用方法。通过深入研究这些示例,开发者不仅可以提升...

Global site tag (gtag.js) - Google Analytics