android读取功能

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

  });
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值