首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

数据保存到sd卡下

2012-09-03 
数据保存到sd卡上1 关键代码?package cn.lee.dataimport java.io.Fileimport java.io.FileInputStreami

数据保存到sd卡上

1 关键代码

?

package cn.lee.data;

import java.io.File;
import java.io.FileInputStream;
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.os.Environment;
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 EditText readfileContentEditText;
?private Button button;
?private Button readButton;
?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);

??button = (Button) this.findViewById(R.id.button);
??readButton = (Button) this.findViewById(R.id.readButton);
??fileNameEditText = (EditText) this.findViewById(R.id.fileName);
??fileContentEditText = (EditText) this.findViewById(R.id.fileContent);
??readfileContentEditText = (EditText) this
????.findViewById(R.id.readfileContent);

??// 读取
??readButton.setOnClickListener(onClickListener);
??// 保存
??button.setOnClickListener(onClickListener);
?}

?/**
? * 由于这个内部实现类是一个接口的实例 所以这里把他提取出来 作为一个成员变量 2010-04-18
? */
?private View.OnClickListener onClickListener = new View.OnClickListener() {
??/**
?? * 由于button的父类是view 所以这里的onclick的参数传来的view v就可以找到这个button
?? */
??public void onClick(View v) {
???Button button = (Button) v;// 将父类view强转成子类button
???int info = R.string.sus;? //操作成功
???String fileNameString = fileNameEditText.getText().toString();
???
???/**
??? * 判断sd卡是否存在 Environment.getExternalStorageState() 得到sd卡当前的状态
??? *
??? * getExternalStorageState() returns MEDIA_MOUNTED if the
??? * media is present and mounted at its mount point with
??? * read/write access. 如果返回 MEDIA_MOUNTED表示外部存储设备存在。并且有读写的权限
??? */
???
???if (Environment.getExternalStorageState().equals(
?????Environment.MEDIA_MOUNTED)) {
????if ("".equals(fileNameString)) {
?????info = R.string.filenamenotnull; //文件名不能为空
????} else {
?????FileOutputStream fileOutputStream = null;
?????FileInputStream fileInputStream = null;
?????try {
??????switch (button.getId()) {
??????case R.id.button: {// 保存
???????String fileContentString = fileContentEditText
?????????.getText().toString();
???????/**
??????? * Environment.getExternalStorageDirectory();
??????? * 得到外存储设备的路径
??????? *
??????? */
???????File file = new File(Environment
?????????.getExternalStorageDirectory(),
?????????fileNameString);
???????fileOutputStream = new FileOutputStream(file);
???????DataManager.saveDate(fileOutputStream,
?????????fileContentString);
???????break;
??????}

??????case R.id.readButton: {
???????fileInputStream = null;
???????fileInputStream = AboutDateActivity.this
?????????.openFileInput(fileNameString);
???????String contentString = DataManager
?????????.readDate(fileInputStream);
???????readfileContentEditText.setText(contentString);
???????break;
??????}
??????default:
???????break;
??????}

?????} catch (Exception e) {
??????// TODO Auto-generated catch block
??????Log.i(TAGSTRING, e.toString());
??????info = R.string.infor;
?????} finally {
??????try {
???????if (fileOutputStream != null) {
????????fileOutputStream.close();
???????}
???????if (fileInputStream != null) {
????????fileInputStream.close();
???????}

??????} catch (IOException e) {

???????Log.i(TAGSTRING, e.toString());
???????info = R.string.infor;
??????}
?????}

????}
???} else {
????info = R.string.infor;
???}
???Toast.makeText(AboutDateActivity.this, info, 1).show();
??}

?};
}

?

2 资源文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
????? package="cn.lee.data"
????? android:versionCode="1"
????? android:versionName="1.0">
??? <application android:icon="@drawable/icon" android:label="@string/app_name">
??? ?<uses-library? android:name="android.test.runner" />
??????? <activity android:name=".AboutDateActivity"
????????????????? 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>
??? <uses-sdk android:minSdkVersion="7" />
?<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.lee.data"
?android:label="Test for my app"/>
?<!-- 允许程序访问外部存储设备 -->
?<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
?<!-- 允许创建和删除外部存储设备的文件 -->
?<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
</manifest>

?

?

3 业务service

?

package cn.lee.Manager;

import java.io.ByteArrayOutputStream;

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;
?}
}

热点排行