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

本文实践知识点有有三:

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");
		@Override
		public 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,上下文,一般一个类实例化后就有一个上下文。

測试结果:


猜你喜欢

转载自www.cnblogs.com/ldxsuanfa/p/10537943.html