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,上下文,一般一个类实例化后就有一个上下文。
测试结果:
- android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)
- Android手机数据读写方法(内部存储、SD卡,网络加载,包内文件读取)
- 初学Android,数据存储之读写SD卡文件(四十三)
- Android——数据存储(四种方式之二)读写SD卡
- 初学Android,数据存储之SD卡文件浏览器(四十四)
- 【Android 开发】:数据存储之File文件存储 [即SD卡的写入与读取]
- 【Android 开发】:数据存储之File文件存储 [即SD卡的写入与读取]
- Android之Android的数据存储--SD卡
- 从头学Android之Android的数据存储--SD卡
- 文件的读写,sd卡存储数据,SharedPerference存储
- Android 存储学习之保存系统短信到SD卡(使用XML序列化器)
- Android之SD卡简单的文件读写操作
- Android读写SD卡上的数据
- Android数据存储方式(一)文件读写操作
- Android 存储学习之保存系统短信到SD卡
- Android的数据存储和IO-SD卡文件浏览器
- Android的SD卡文件读写
- Android的SD卡文件读写
- C++标准库扩展权威指南 (zz)
- Windows平台cocos2d-x 3.0 android开发环境
- 新手学telnet远程登录与console口配置
- Java中的包装类及其注意事项
- Hibernate 所有缓存机制详解
- android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)
- form 表单传值到Struts Action 出现的问题
- 非模态对话框的创建和关闭
- Windows下Python环境的搭建
- uva 1073 - Glenbow Museum(递推)
- 2014-04-12腾讯实习生笔试题目及解析
- HDU 2485 求删最少点使得 边权=1的有向图最短路>k
- 关于MAC下中文latex编译环境的配置
- 链接分析之随机游走模型和子集传播模型