openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:

Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。

getExternalStorageState()方法获得SD卡挂载情况。

getExternalStorageDirectory()方法可以获得外部存储器路径,建议这样写。

读取文件知识点:

对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录

在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:
在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:
mksdcard 2048M D:\AndroidTool\sdcard.img

在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

MainActivity.java:

package com.example.datesave;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{private EditText mEtName;privateEditText mEtPwd;privateButton mBtLogin;privateCheckBox mCb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);mEtName = (EditText) this.findViewById(R.id.qq_number);    mEtPwd = (EditText) this.findViewById(R.id.pw);mBtLogin = (Button) this.findViewById(R.id.login);mCb = (CheckBox) this.findViewById(R.id.pw_remember);mBtLogin.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.login:if (mCb.isChecked()) {saveservise service = new saveservise(this);String name =mEtName.getText().toString().trim();String pwd =mEtPwd.getText().toString().trim();Log.i("11", name+":"+pwd);service.saveToRomFile(name, pwd);service.saveToSD(name, pwd);Toast.makeText(this, "SD OK", Toast.LENGTH_LONG).show();}else {Toast.makeText(this, "loading...", Toast.LENGTH_LONG).show();}break;default:break;}}}
saveservise.java:

package com.example.datesave;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.content.Context;import android.os.Environment;import android.widget.Toast;public class saveservise {// 还没被初始化private Context context;public saveservise(Context context) {this.context = context;}/** * 保存到手机 *  * @param name * @param pwd */@SuppressWarnings("deprecation")public void saveToRomFile(String name, String pwd) {try {FileOutputStream fos = context.openFileOutput("chao.txt",Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);String content = name + ";" + pwd;fos.write(content.getBytes());fos.flush();fos.close();} catch (IOException e) {e.printStackTrace();}}/* * 存到SD卡 */public void saveToSD(String name, String pwd) {try {//判断sd卡是否正常挂载if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {File file = new File(Environment.getExternalStorageDirectory(),"bing.txt");FileOutputStream fos = new FileOutputStream(file);String content = name + ";" + pwd;fos.write(content.getBytes());fos.flush();} else {Toast.makeText(context, "SD卡不可用", Toast.LENGTH_LONG).show();}} catch (IOException e) {// TODO 自动生成的 catch 块Toast.makeText(context, "sd卡写入失败", Toast.LENGTH_LONG).show();e.printStackTrace();}}}
activity_main:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/qq" />    <EditText        android:id="@+id/qq_number"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:lines="1" />    <EditText        android:id="@+id/pw"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:lines="1" />    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="0.27"        android:clickable="false" >        <Button            android:id="@+id/login"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:layout_alignParentTop="true"            android:text="@string/login" />        <CheckBox            android:id="@+id/pw_remember"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_alignParentTop="true"            android:text="@string/pw_remember" />    </RelativeLayout></LinearLayout>
在清单文件中加入下面权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
下面为读文件操作:
package com.example.dateread;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText mEtName;private EditText mEtPwd;private Button mBtLogin;private CheckBox mCb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mEtName = (EditText) this.findViewById(R.id.qq_number);mEtPwd = (EditText) this.findViewById(R.id.pw);mBtLogin = (Button) this.findViewById(R.id.login);mCb = (CheckBox) this.findViewById(R.id.pw_remember);FileInputStream fis;try {fis = new FileInputStream("/data/data/com.example.datesave/files/chao.txt");ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {bos.write(buffer, 0, len);}byte[] result = bos.toByteArray();String content = new String(result);String[] array = content.split(";");mEtName.setText(array[0]);mEtPwd.setText(array[1]);Toast.makeText(this, content, Toast.LENGTH_LONG).show();} catch (IOException e) {Toast.makeText(this, "获取失败", Toast.LENGTH_LONG).show();e.printStackTrace();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
   

更多相关文章

  1. Android(安卓)布局之DrawLayout
  2. android错误分析集锦
  3. android编译系统分析
  4. Android(安卓)上SuperUser获取ROOT权限原理解析
  5. 系出名门Android(1) - 在 Windows 下搭建 Android(安卓)开发环境
  6. adb shell 命令详解
  7. android开发文档中的一个小错误
  8. Android(安卓)MuPDF 部署
  9. Android(二)数据存储和访问 之文件

随机推荐

  1. Android高效编程注意事项
  2. Android的SDK,NDK以及JNI
  3. Android(安卓)Studio快捷键设置成跟Eclip
  4. Android模拟器环境中安装和删除应用程序
  5. 浅谈android的selector,背景选择器
  6. Android中Launcher对于AppWidget处理的分
  7. android 获取uri的正确文件路径的办法
  8. Android(安卓)NDK带来什么
  9. android 手机存储介质大全
  10. Android(安卓)软键盘弹出隐藏挤压界面等