android中怎么写文件( 二 )


Preferences Files Databases Network 接下来将依次介绍上诉四个Android保存数据方法:Preferences从其保存数据的结构来分析,这是一个相对较轻量级的存储数据的方法 。类似于我们常用的ini文件保存软件初始化设置,同样在Android平台常用于存储较简单的参数设置 。
例如,可以通过它保存上一次用户所作的修改或者自定义参数设定,当再次启动程序后依然保持原有的设置 。通过Context.getSharedPreferences()方法来读写数值,这个方法通过设置name来使得同一个程序内的其它模块共享数据 。
如果不需要与其它模块共享数据,可以使用Activity.getPreferences()方法保持数据私有 。需要着重强调一点,无法直接在多个程序间共享Preferences数据(不包括使用Content Providers) 。
通过一个实例来了解实际使用方法:import android.app.Activity; import android.content.SharedPreferences; public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; . . . . Override protected void onCreate(Bundle state){ super.onCreate(state); . . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // Save user preferences. We need an Editor object to // make changes. All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Don't forget to commit your edits!!! editor.commit(); } } Files从这是第二种方法,可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件 。同样在默认的状态下,文件是不能在不同的程序间共享 。
写文件:调用Context.openFileOutput()方法根据指定的路径和文件名来创建文件,这个方法会返回一个FileOutputStream对象 。读取文件:调用Context.openFileInput()方法通过制定的路径和文件名来返回一个标准的Java FileInputStream对象 。
(注意:在其它程序中将无法应用相同的路径和文件名来操作文件)另外编译程序之前,在res/raw/tempFile中建立一个static文件,这样可以在程序中通过Resources.openRawResource (R.raw.myDataFile) 。
3.Android开发之如何读写文件【转】 首先介绍如何存储数据,显然,要将数据从应用中输出到文件中,必须得到一个输出流outPutStream,然后往输出流中写入数据,在这里Android自带了一个得到应用输出流的方法 FileOutputStream fos =context.openFileOutput(“yuchao.txt”,Context.MODE_PRIVATE); (1) 其中第一个属性为文件名,第二个属性为读写模式(有关读写模式的说明下面将详细阐述),然后在文件输出流fos中便可以写入数据 Fos.write(“Hi,”I'm Chao Yu!”.getBytes()); 用完文件输出流之后记得关闭 fos.close(); 这样,在/data/data/packageName/file目录下就生成了一个文件名为yuchao.txt的文件,文件中的内容为” Hi,I'm Chao Yu!” 有关(1)中读写模式其实就是制定创建文件的权限以及在读写的时候的方式,Android中提供了以下几种读写模式 Context.MODE_PRIVATE = 0 该模式下创建的文件其他应用无权访问,并且本应用将覆盖原有的内容 Context.MODE_APPEND = 32768 该模式下创建的文件其他应用无权访问,并且本应用将在原有的内容后面追加内容 Context.MODE_WORLD_READABLE = 1 该模式下创建的文件其他应用有读的权限 Context.MODE_WORLD_WRITEABLE = 2 该模式下创建的文件其他应用有写的权限 如果需要将文件设置为外部应用可以读写,可将读写模式设置为Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE 一般情况下,各个应用维护的数据都在一个特定的文件夹中,即上面所提到的/data/data/packageName/file(存在于手机存储中),但手机内存毕竟有限,所以有些情况下,我们需要往SD卡中写入数据文件,这其实和普通的java web 应用步骤一样,都是先创建特针对特定目录特定文件的输出流,然后往输出流中写数据,这里要注意一个方法,就是获取SD卡根目录的方法,随着Android系统不断升级,SD卡的根目录随时都有可能改变,Android中得到SD卡根目录的方法是 File sdCardDir = Environment.getExternalStorageDirectory(); 然后就可以进行下面的步骤 File saveFile = new File(sdCardDir, “yuchao.txt”); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write("Hi,I'm ChaoYu".getBytes()); outStream.close(); 值得注意的是,在往SD卡中写数据的时候,健壮的代码必须考虑SD卡不存在或者写保护的情况,故在写入之前,先做判断 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ …… } 接着,我们来学习下我们的应用程序如何读取文件中的数据,其实就是写的逆向过程 若要读取应用程序默认维护的文件(即/data/data/packageName/file目录下的文件),首先得到文件输入流 FileInputStream istream = this.context.openFileInput(“yuchao.txt”); 然后在内存中开辟一段缓冲区 byte[] buffer = new byte[1024]; 然后创建一个字节数组输出流 ByteArrayOutputStream ostream = new ByteArrayOutputStream(); 读出来的数据首先放入缓冲区,满了之后再写到字符输出流中 while((len=istream.read(buffer))!=-1){ ostream.write(buffer, 0, len); } 最后关闭输入流和输出流 istream.close(); ostream.close(); 将得到的内容以字符串的形式返回便得到了文件中的内容了,这里的流操作较多,故以一张图片来说明,见图1 return new String(ostream.toByteArray()); 从SD卡中读取数据与上述两个步骤类似,故不再赘述,留给读者自己思考 如在开发过程中进行SD卡地读写,切忌忘了加入权限