Android入门:File文件存储

数据的存储有多种方式,比如数据库存储、SharedPreferences存储、文件存储等;

这里我们将要介绍最简单的文件存储方式;

文件存储简单的来说就是一般的JAVASE中的IO流,只是把他应用于Android手机中而已;

一、文件存储核心代码


文件存储


(1)FileOutputStream out = context.openFileOutput(String filename,int mode); 以mode模式获得文件输出流

(2)out.write(byte[]b);

FileOutputStream out = null;   out = context.openFileOutput(filename, Context.MODE_***);   out.write(filecontent.getBytes("UTF-8"));   out.close();  

注意:文件默认会存储到/data/data/package/files中;

文件读取


(1)FileInputStream in = context.openFileInput(String filename);   获得某个文件的文件流

(2)int length = in.read(byte[]);

/*  每次读取固定的字节,并将此字节输出到字节输出流中,当全部读取完毕后,将字节流中的内容一并输出  */   FileInputStream in = null;   ByteArrayOutputStream bout = null;   byte[]buf = new byte[1024];   bout = new ByteArrayOutputStream();   int length = 0;   in = context.openFileInput(filename); //获得输入流    while((length=in.read(buf))!=-1){       bout.write(buf,0,length);   }   byte[] content = bout.toByteArray();   filecontentEt.setText(new String(content,"UTF-8")); //设置文本框为读取的内容    in.close();   bout.close();  

注意:默认会读取/data/data/package/files的文件;


二、文件模式介绍


1.Context.MODE_PRIVATE:私有覆盖模式    -  rw-  rw-  ---

只能被当前应用访问,并且如果写入,则覆盖

2.Context.MODE_APPEND:私有追加模式     -   rw-  rw-  ---

只能被当前应用访问,并且如果写入,则追加;

3.Context,MODE_WORLD_READABLE:公有只读模式      -  rw-  rw-   r--

可以被其他应用读取;

4.Context.MODE_WORLD_WRITEABLE:公有可写模式     - rw-   rw-  -w-

可以被其他应用写入,但不能读取;


注意,如果希望其他使得文件模式叠加,则可以使用加号连接;

比如:Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE 表示其他应用读写;


三、简单应用实例


1.效果图


目标:当点击保存时,将以特定的文件名称和特定的文件内容保存内容,点击读取时,将读取特定的文件的文件内容显示到文件内容文本框;


Android入门:File文件存储


当点击保存之后,效果如下:




MainActivity.java

package org.xiazdong.file;      import java.io.ByteArrayOutputStream;   import java.io.FileInputStream;   import java.io.FileNotFoundException;   import java.io.FileOutputStream;      import android.app.Activity;   import android.content.Context;   import android.os.Bundle;   import android.view.View;   import android.view.View.OnClickListener;   import android.widget.Button;   import android.widget.EditText;      public class MainActivity extends Activity {       private Button saveButton,readButton;       private EditText filenameEt,filecontentEt;       private Context context = this;       private OnClickListener listener = new OnClickListener(){           @Override           public void onClick(View v) {               if(v==saveButton){                   String filename = filenameEt.getText().toString();                   String filecontent = filecontentEt.getText().toString();                   FileOutputStream out = null;                   try {                       out = context.openFileOutput(filename, Context.MODE_PRIVATE);                       out.write(filecontent.getBytes("UTF-8"));                   } catch (Exception e) {                       e.printStackTrace();                   }                   finally{                       try {                           out.close();                       } catch (Exception e) {                           e.printStackTrace();                       }                   }               }               else if(v==readButton){                   String filename = filenameEt.getText().toString(); //获得读取的文件的名称                    FileInputStream in = null;                   ByteArrayOutputStream bout = null;                   byte[]buf = new byte[1024];                   bout = new ByteArrayOutputStream();                   int length = 0;                   try {                       in = context.openFileInput(filename); //获得输入流                        while((length=in.read(buf))!=-1){                           bout.write(buf,0,length);                       }                       byte[] content = bout.toByteArray();                       filecontentEt.setText(new String(content,"UTF-8")); //设置文本框为读取的内容                    } catch (Exception e) {                       e.printStackTrace();                   }                   filecontentEt.invalidate(); //刷新屏幕                    try{                       in.close();                       bout.close();                   }                   catch(Exception e){}               }           }                  };       @Override       public void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.main);           saveButton = (Button)this.findViewById(R.id.saveButton);           readButton = (Button)this.findViewById(R.id.readButton);           filenameEt = (EditText)this.findViewById(R.id.filename);           filecontentEt = (EditText)this.findViewById(R.id.filecontent);           saveButton.setOnClickListener(listener);           readButton.setOnClickListener(listener);       }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pxyzy.html