android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)

来源:互联网 发布:reminder 软件 编辑:程序博客网 时间:2024/05/17 22:36

本文实践知识点有有三:

1.布局文件,android布局有相对布局,线性布局,绝对布局,表格布局,标签布局等,各个布局可以嵌套的。本文的布局文件就是线性布局的嵌套

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"         android:layout_width="fill_parent"           android:layout_height="fill_parent"           android:orientation="vertical">          <TextView                            android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:text="@string/Telhint"              android:textSize="19sp"              android:textColor="#FFFFFF"              android:background="#000000"              />          <EditText              android:id="@+id/Tel"              android:inputType="number"              android:layout_width="fill_parent"              android:layout_height="75sp"             android:textSize="30sp"             android:paddingLeft="10sp"              android:paddingRight="10sp"             android:background="@drawable/text1"                           />          <TextView              android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:text="@string/Smshint"              android:textSize="19sp"               android:textColor="#FFFFFF"              android:background="#000000"              />             <EditText              android:id="@+id/Sms"              android:inputType="textMultiLine"              android:layout_width="fill_parent"              android:layout_height="180dip"              android:textSize="19sp"              android:minLines="10"              android:gravity="left"              android:background="@drawable/text2"              android:paddingTop="19sp"               android:paddingBottom="22sp"              android:paddingLeft="22sp"              android:paddingRight="15sp"              />        <LinearLayout             android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:orientation="horizontal">             <Button              android:layout_marginTop="10sp"              android:layout_marginLeft="3sp"              android:id="@+id/button0"              android:layout_width="wrap_content"              android:layout_height="75sp"              android:text="@string/send"              android:textColor="#7cfc00"              android:textSize="19sp"                                       />             <Button                 android:id="@+id/button1"                 android:layout_width="wrap_content"                 android:layout_height="75sp"                 android:layout_marginTop="10sp"                  android:layout_marginLeft="3sp"                 android:text="@string/savephone"                 android:textColor="#800080"                 android:textSize="19sp" />              <Button                 android:id="@+id/button6"                 android:layout_marginTop="10sp"                 android:layout_width="wrap_content"                 android:layout_height="75sp"                  android:layout_marginLeft="3sp"                 android:text="@string/savecache"                 android:textColor="#800080"                 android:textSize="19sp" />              <Button                  android:id="@+id/button10"                  android:layout_width="wrap_content"                  android:layout_height="75sp"                 android:layout_marginTop="5sp"                  android:layout_marginLeft="1sp"                  android:layout_gravity="center"                   android:text="@string/deletecache"                  android:textColor="#800080"                  android:textSize="19sp" />           </LinearLayout>         <LinearLayout             android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:orientation="horizontal">              <Button               android:layout_marginTop="10sp"               android:layout_marginLeft="3sp"                                        android:id="@+id/button2"              android:layout_width="wrap_content"              android:layout_height="75sp"              android:text="@string/clear"              android:textColor="#ff0000"              android:textSize="19sp"                                  />              <Button               android:layout_marginTop="10sp"              android:layout_marginLeft="3sp"              android:id="@+id/button3"              android:layout_width="wrap_content"              android:layout_height="75sp"              android:text="@string/savesdcard"              android:textColor="#800080"              android:textSize="19sp"                />                <Button               android:layout_marginTop="10sp"              android:layout_marginLeft="3sp"              android:id="@+id/button7"              android:layout_width="wrap_content"              android:layout_height="75sp"              android:text="@string/Readcache"              android:textColor="#800080"              android:textSize="19sp"                />                  <Button               android:id="@+id/button11"               android:layout_width="wrap_content"              android:layout_height="75sp"              android:text="@string/future"              android:layout_marginTop="2sp"              android:layout_marginLeft="1sp"              android:gravity="center"              android:textColor="#800080"              android:textSize="19sp" />         </LinearLayout>            <LinearLayout             android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:orientation="horizontal">              <Button                 android:id="@+id/button4"                 android:layout_width="90dp"                 android:layout_height="wrap_content"                 android:layout_marginTop="10sp"              android:layout_marginLeft="1sp"                 android:text="@string/Readphone"                 android:textColor="#0000ff"                 android:textSize="19sp" />             <Button                 android:id="@+id/button5"                 android:layout_width="90dp"                 android:layout_height="wrap_content"                  android:layout_marginTop="10sp"              android:layout_marginLeft="1sp"                 android:text="@string/Readsdcard"                 android:textColor="#0000ff"                 android:textSize="19sp" />             <Button                 android:id="@+id/button8"                 android:layout_width="90dp"                 android:layout_height="wrap_content"                  android:layout_marginTop="10sp"              android:layout_marginLeft="1sp"                 android:text="@string/deletephone"                 android:textColor="#0000ff"                 android:textSize="19sp" />               <Button                 android:id="@+id/button9"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_marginTop="10sp"              android:layout_marginLeft="1sp"                 android:text="@string/deletesd"                 android:textColor="#0000ff"                 android:textSize="19sp" />                    </LinearLayout>            </LinearLayout>    
l
2.布局文件中使用字符以及Java源代码中使用的字符最好在string.xml先定义,然后再引用

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">MySMS</string>    <string name="Telhint">请输入号码:</string>    <string name="Smshint">请输入短信内容:</string>     <string name="send">发送</string>     <string name="OK">发送成功</string>     <string name="savephone">to-手机</string>     <string name="savesdcard">to-SD卡</string>      <string name="ReadSD">读SD卡信息</string>       <string name="clear">清除</string>        <string name="action_settings">Settings</string>          <string name="Readphone">读手机短信</string>     <string name="Readsdcard">读sd卡短信</string>      <string name="future"> --NULL-- </string>      <string name="savecache">to-cache</string>      <string name="Readcache">读cache</string>     <string name="deletephone">删手机短信</string>      <string name="deletesd">删sd卡短信</string>       <string name="deletecache">C-Cache</string></resources>

3.涉及的安全方面的业务,必需在androidMainifest.xml注册,如发送短信,拨打电话,读取SD卡数据等

  <uses-permission android:name="android.permission.SEND_SMS"/>
   <uses-permission  android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
   <uses-permission  android:name="android.permission.READ_EXTERNAL_STORAGE"/>
       <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>"

其中其中竖屏翻转,也需要在这里注册

 android:screenOrientation="portrait"

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.mysms"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="19" />  <uses-permission android:name="android.permission.SEND_SMS"/>   <uses-permission  android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>   <uses-permission  android:name="android.permission.READ_EXTERNAL_STORAGE"/>       <uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>"    <application        android:allowBackup="true"        android:icon="@drawable/sms"        android:label="@string/app_name"        android:theme="@style/AppTheme"              >        <activity            android:name="com.example.mysms.MainActivity"            android:label="@string/app_name"             android:screenOrientation="portrait"            >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>                    </activity>    </application></manifest>

4.操作文件的功能实现最好新建一个业务类


package com.example.FileService;import android.content.Context;import android.os.Environment;import android.util.Log;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class Fileservice {private Context context;public Fileservice(Context context) {this.context = context;}private final String tag ="mytag";    public void SavefileToPhone(String filename,String content) throws Exception    {      Log.e(tag, "hello,start save file to phone internal");       FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);    Log.e(tag, "hello,open file is ok");    outStream.write(content.getBytes());    outStream.close();        }    public void SavefileToCache(String filename,String content) throws Exception    {       File cachedir = context.getCacheDir();       File file=new File(cachedir,filename);       OutputStream os = new FileOutputStream(file);       os.write(content.getBytes());       os.close();    }    public void SavefileToSD(String filename,String content) throws Exception    {    Log.e(tag,"SD card is begint!");       File path= Environment.getExternalStorageDirectory();              Log.e(tag,"SD card save is start!");       File file=new File(path,filename);       Log.e(tag,"SD card file  is creat!");       OutputStream os = new FileOutputStream(file);       Log.e(tag,"SD card outputstream is get!");       os.write(content.getBytes());       Log.e(tag,"SD card is write!");       os.close();    }    public String ReadfileToSD(String filename) throws Exception    {       File path= Environment.getExternalStorageDirectory();             int len = 0;       byte[] buffer = new byte[1024];       Log.e(tag, "hello,Read cache file begin");       File file=new File(path,filename);       Log.e(tag, "hello,get a file string");       ByteArrayOutputStream outStream = new ByteArrayOutputStream();       Log.e(tag, "hello,get a outstream");       FileInputStream InputStream = new FileInputStream(file);        Log.e(tag, "hello,get a Inputstream");   while((len=InputStream.read(buffer))!=-1)   {   outStream.write(buffer, 0, len);   }   byte[] data=outStream.toByteArray();   InputStream.close();   return new String (data);    }    public String ReadfileFromcache(String filename) throws Exception    {     int len = 0;    byte[] buffer = new byte[1024];    File cachedir = context.getCacheDir();    Log.e(tag, "hello,Read cache file begin");    File file=new File(cachedir,filename);    Log.e(tag, "hello,get a file string");    ByteArrayOutputStream outStream = new ByteArrayOutputStream();    Log.e(tag, "hello,get a outstream");    FileInputStream InputStream = new FileInputStream(file);     Log.e(tag, "hello,get a Inputstream");while((len=InputStream.read(buffer))!=-1){outStream.write(buffer, 0, len);}byte[] data=outStream.toByteArray();InputStream.close();return new String (data);        }    public String ReadfileFromPhone(String file) throws Exception    {      int len = 0;    byte[] buffer = new byte[1024];        ByteArrayOutputStream outStream = new ByteArrayOutputStream();        FileInputStream InputStream= context.openFileInput(file);        while((len=InputStream.read(buffer))!=-1)    {    outStream.write(buffer, 0, len);    }        byte[] data=outStream.toByteArray();    return new String (data);    }}

注意android操作文件有两种方式:

一。使用context类,context提供了输入输出流接口,一般用于读写手机内部文件

二。.使用file类,这个是更顶层的类,通过文件路径和文件名,可以用于读写系统任何地方的文件,一般用于读写cache,SD卡,其他路径文件。

5.activity类,用于GUI操作

package com.example.mysms;import java.io.File;import java.util.ArrayList;import com.example.FileService.Fileservice;import android.support.v7.app.ActionBarActivity;import android.telephony.SmsManager;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import android.view.View.OnClickListener;import android.os.Bundle;import android.os.Environment;public class MainActivity extends ActionBarActivity { EditText text1; EditText text2;Button bt,bt1,bt2,bt3,bt4,bt5,bt6,bt7,bt8,bt9,bt10;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         text1=(EditText)findViewById(R.id.Tel);         text2=(EditText)findViewById(R.id.Sms);                   bt=(Button)findViewById(R.id.button0);         bt1=(Button)findViewById(R.id.button1);         bt2=(Button)findViewById(R.id.button2);         bt3=(Button)findViewById(R.id.button3);         bt4=(Button)findViewById(R.id.button4);         bt5=(Button)findViewById(R.id.button5);         bt6=(Button)findViewById(R.id.button6);         bt7=(Button)findViewById(R.id.button7);         bt8=(Button)findViewById(R.id.button8);         bt9=(Button)findViewById(R.id.button9);         bt10=(Button)findViewById(R.id.button10);         bt.setOnClickListener(listener);         bt1.setOnClickListener(listener);         bt2.setOnClickListener(listener);         bt3.setOnClickListener(listener);         bt4.setOnClickListener(listener);         bt5.setOnClickListener(listener);         bt6.setOnClickListener(listener);         bt7.setOnClickListener(listener);         bt8.setOnClickListener(listener);         bt9.setOnClickListener(listener);         bt10.setOnClickListener(listener);    }    private OnClickListener listener =new OnClickListener()    {       String Tel;       String Sms;       String filename ;       private final String Tag=new String("Activity_tag");@Overridepublic void onClick(View v) {Button btx=(Button)v;switch(btx.getId()){case R.id.button0:Tel=text1.getText().toString();Sms = text2.getText().toString();if(Tel.equals("")==true){    Toast.makeText(MainActivity.this, "请输入号码!", Toast.LENGTH_LONG).show();return; }if(Sms.equals("")==true){Toast.makeText(MainActivity.this, "请输入信息!", Toast.LENGTH_LONG).show();return;}    SmsManager smsm=SmsManager.getDefault();    ArrayList<String> texts=smsm.divideMessage(Sms);    for(String text:texts)    {    smsm.sendTextMessage(Tel, null, text, null, null);    }    text1.setText("");    text2.setText("");    Toast.makeText(MainActivity.this, R.string.OK, Toast.LENGTH_LONG).show();    break;case R.id.button1:Tel=text1.getText().toString();Sms = text2.getText().toString();filename = Tel+".txt";Fileservice savetophone = new Fileservice(getApplicationContext());try{savetophone.SavefileToPhone(filename, Sms);    Toast.makeText(getApplicationContext(), "保存到手机成功", Toast.LENGTH_SHORT).show();Toast.makeText(getApplicationContext(), "文件路径为"+getApplicationContext().getFilesDir().toString(), Toast.LENGTH_SHORT).show();}catch(Exception e){Toast.makeText(getApplicationContext(), "保存到手机失败", Toast.LENGTH_SHORT).show();}break;case R.id.button2:text2.setText("");Toast.makeText(getApplicationContext(), "清除成功", Toast.LENGTH_SHORT).show();break;case R.id.button3:Tel=text1.getText().toString();Sms = text2.getText().toString();                filename = Tel+".txt";                Fileservice service3 = new Fileservice(getApplicationContext());                try                {                if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))                {                 service3.SavefileToSD(filename, Sms);                 File path= Environment.getExternalStorageDirectory();                     String PATH = path.toString();                   Toast.makeText(getApplicationContext(), "保存SD卡中的短信成功", Toast.LENGTH_SHORT).show();                   Toast.makeText(getApplicationContext(), "SD卡路径为"+PATH, Toast.LENGTH_SHORT).show();                }                else                                {                Toast.makeText(getApplicationContext(), "SD卡无法识别", Toast.LENGTH_SHORT).show();                }                }                catch(Exception e)                {                Toast.makeText(getApplicationContext(), "保存SD卡中的短信失败", Toast.LENGTH_SHORT).show();                }break;case R.id.button4:Tel=text1.getText().toString();filename = Tel+".txt";Fileservice service = new Fileservice(getApplicationContext());try{   Sms=service.ReadfileFromPhone(filename);    text2.setText(Sms);     Toast.makeText(getApplicationContext(), "读取手机中的短信成功", Toast.LENGTH_SHORT).show();Toast.makeText(getApplicationContext(),  "文件路径为"+getApplicationContext().getFilesDir().toString(), Toast.LENGTH_SHORT).show();}catch(Exception e){Toast.makeText(getApplicationContext(), "读取手机中的短信失败", Toast.LENGTH_SHORT).show();}break;case R.id.button5:Tel=text1.getText().toString();        filename = Tel+".txt";                Fileservice service4 = new Fileservice(getApplicationContext());                try                {                if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))                {                                  text2.setText(service4.ReadfileToSD(filename));                   Toast.makeText(getApplicationContext(), "读取SD卡中的短信成功", Toast.LENGTH_SHORT).show();                }                else                                {                Toast.makeText(getApplicationContext(), "SD卡无法识别", Toast.LENGTH_SHORT).show();                }                }                catch(Exception e)                {                Toast.makeText(getApplicationContext(), "读取SD卡中的短信失败", Toast.LENGTH_SHORT).show();                }                break;case R.id.button6:Tel=text1.getText().toString();Sms = text2.getText().toString();                filename = Tel+".txt";Fileservice savecache = new Fileservice(getApplicationContext());try{savecache. SavefileToCache(filename, Sms);    Toast.makeText(getApplicationContext(), "保存到cache成功", Toast.LENGTH_SHORT).show();Toast.makeText(getApplicationContext(), "文件路径为"+getApplicationContext().getCacheDir().toString(), Toast.LENGTH_SHORT).show();}catch(Exception e){Toast.makeText(getApplicationContext(), "保存到手机失败", Toast.LENGTH_SHORT).show();}case R.id.button7:Tel=text1.getText().toString();    filename = Tel+".txt";    try{     Fileservice service1=new Fileservice(getApplicationContext()); text2.setText(service1.ReadfileFromcache(filename));; Toast.makeText(getApplicationContext(), "读取cache中的数据成功", Toast.LENGTH_SHORT).show();    }    catch(Exception e)    {    Toast.makeText(getApplicationContext(), "读取cache中的数据失败", Toast.LENGTH_SHORT).show();    }   break;case R.id.button8:Tel=text1.getText().toString();filename = Tel+".txt";getApplicationContext().deleteFile(filename);Toast.makeText(getApplicationContext(), "删除手机短信的短信成功", Toast.LENGTH_SHORT).show();break;case R.id.button9:Tel=text1.getText().toString();        filename = Tel+".txt";                try                {                if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))                {                                 File file=new File(Environment.getExternalStorageDirectory(),filename);                file.delete();                   Toast.makeText(getApplicationContext(), "删除SD卡中的短信成功", Toast.LENGTH_SHORT).show();                }                else                                {                Toast.makeText(getApplicationContext(), "SD卡无法识别", Toast.LENGTH_SHORT).show();                }                }                catch(Exception e)                {                Toast.makeText(getApplicationContext(), "删除SD卡中的短信失败", Toast.LENGTH_SHORT).show();                }                break;case R.id.button10:Log.i(Tag,"Clear the cache\n");File cachedir = getApplicationContext().getCacheDir();Log.i(Tag,"Get the patch\n");    File file=new File(cachedir,filename);    Log.i(Tag,"Get the file structor\n");    file.delete();    Log.i(Tag,"Clear the cache end\n");Toast.makeText(getApplicationContext(), "删除Cache中数据成功", Toast.LENGTH_SHORT).show();break;} }};    }


在本实践中还要学会调试方式:

1.采用logcat查看日志调试

2.通过File explorer 导出文件调试

3.单元测试调试

4. 如何通过google 官方手册学习API的使用

重要类;context,上下文,一般一个类实例化后就有一个上下文。

测试结果:


0 0
原创粉丝点击