• 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
    ");
    				File cachedir = getApplicationContext().getCacheDir();
    				Log.i(Tag,"Get the patch
    ");
    			    File file=new File(cachedir,filename);
    			    Log.i(Tag,"Get the file structor
    ");
    			    file.delete();
    			    Log.i(Tag,"Clear the cache end
    ");
    				Toast.makeText(getApplicationContext(), "删除Cache中数据成功", Toast.LENGTH_SHORT).show();
    				break;
    				
    			
    			}
    				 
    			}
    			
    			
    		};
    
    
        
    }
    


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

    1.採用logcat查看日志调试

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

    3.单元測试调试

    4. 怎样通过google 官方手冊学习API的使用

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

    測试结果:


  • 相关阅读:
    用代理模式 保持用户关闭链接的习惯
    jdbc 链接池的优化
    jdbc 链接池
    xml 操作
    互联网时代常用网站资源整理汇总(一直在完善中)
    快速读懂机器学习(附送详细学习资源)
    快速读懂机器学习(附送详细学习资源)
    常见网络命令之traceroute命令一起其他常用命令
    常见网络命令之traceroute命令一起其他常用命令
    Java案例之士兵作战功能实现
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10537943.html
  • Copyright © 2020-2023  润新知