1 设计界面

<?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">
<!-- wrap_content 包裹 内容-->
<!-- fill_parent 填充父项 一行 -->
<!-- TextView 文本标题 -->
<!-- @+id/filenameTesxwiew 设置id -->
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/hello"
android:id="@+id/filenameTesxwiew" />
<!-- EditText 文本内容项 -->
<EditText android:layout_width="60px"
android:layout_toRightOf="@id/filenameTesxwiew"
android:layout_marginLeft="10px"
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"
android:id="@+id/button"
/>
</LinearLayout>
<!-- 线性布局结束 -->

2 设计业务类

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

3 配置资源文件

<?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" />
<!-- 加入单元测试的启动器 -->
<!-- 注意点 android:targetPackage=""是指定单元测试所在的包 这个包必须和所属应用的包一致 否则会找不到测试类 -->
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.lee.data"
android:label="Test for my app"/>

</manifest>

4 单元测试

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

5 string.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">文件名称</string>
<string name="app_name">数据的保存和读取</string>
<string name="contentlable">文件内容</string>
<string name="buttontext">保存</string>
<string name="infor">保存失败</string>
<string name="sus">保存成功</string>
</resources>

6 动作执行的类

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;//获取布局文件sus的id 保存成功
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 提示信息
Toast.makeText(AboutDateActivity.this, info, 1).show();
}

});
}
}

更多相关文章

  1. android webView与js交互
  2. Android五大布局、日志猫
  3. android linux 基础知识总结
  4. Android应用开发相关下载资源
  5. Android(安卓)getResources的作用和需要注意点
  6. Android(安卓)SDK下载和更新失败的解决方法
  7. 【Android自学笔记】android实现TextView垂直滚动显示
  8. Android(安卓)编译系统分析
  9. Android视图框架

随机推荐

  1. 【同说】@曼青:前端折腾之路
  2. 数组的认识
  3. 【一看】看图说话之瓶颈
  4. 不懂为什么,突然想写一写这篇文章
  5. Android(安卓)Studio解决依赖文件冲突
  6. 【第765期】你不懂JS:this豁然开朗!
  7. 【第766期】你不懂JS:对象
  8. No.8 bin和sbin的区别
  9. 聊聊“干货”
  10. 【第767期】你不懂JS:混合(淆)“类”的对象