当前位置: 代码迷 >> Android >> Android开发手写(17) 数据存储二 文件存储数据
  详细解决方案

Android开发手写(17) 数据存储二 文件存储数据

热度:22   发布时间:2016-04-27 22:27:41.0
Android开发手记(17) 数据存储二 文件存储数据

Android为数据存储提供了五种方式:

1、SharedPreferences

2、文件存储

3、SQLite数据库

4、ContentProvider

5、网络存储

 

  本文主要介绍如何使用文件来存储数据。Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类。

一、存储文件

  首先实例化一个FileOutputStream。

FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);// fileName: 要写入文件的名称// MODE_PRIVATE: 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容// MODE_APPEND: 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.// MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取,不推荐使用// MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入,不推荐使用

  然后调用foStream.write()即可完成写入。

byte[] buffer = fileContent.getBytes();foStream.write(buffer);Toast.makeText(MainActivity.this, "写入成功",Toast.LENGTH_SHORT).show();

  最后进行一些清理工作,刷新写出流和关闭流。

foStream.flush();foStream.close();

二、读取文件

  同样的,首先实例化一个FileInputStream。

FileInputStream fiStream = openFileInput(fileName);

  然后调用fiStream.read()即可

int len = fiStream.available();byte[] buffer = new byte[len];fiStream.read(buffer);

  最后,将文本显示并关闭读文件流

etContent.setText(new String(buffer));Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();fiStream.close();

 

三、完整代码

 1 import android.support.v7.app.AppCompatActivity; 2 import android.os.Bundle; 3 import android.view.View; 4 import android.widget.Button; 5 import android.widget.EditText; 6 import android.widget.Toast; 7  8 import java.io.FileInputStream; 9 import java.io.FileOutputStream;10 11 public class MainActivity extends AppCompatActivity {12 13     private EditText etName;14     private EditText etContent;15     private Button btnWrite;16     private Button btnRead;17     private String fileName = "";18     private String fileContent = "";19 20     @Override21     protected void onCreate(Bundle savedInstanceState) {22         super.onCreate(savedInstanceState);23         setContentView(R.layout.activity_main);24 25         etName = (EditText)findViewById(R.id.etName);26         etContent = (EditText)findViewById(R.id.etContent);27         btnWrite = (Button)findViewById(R.id.btnWrite);28         btnRead = (Button)findViewById(R.id.btnRead);29 30         btnWrite.setOnClickListener(new View.OnClickListener() {31             @Override32             public void onClick(View view) {33                 fileName = etName.getText().toString();34                 fileContent = etContent.getText().toString();35                 try {36                     FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);37                     byte[] buffer = fileContent.getBytes();38                     foStream.write(buffer);39                     Toast.makeText(MainActivity.this, "写入成功",Toast.LENGTH_SHORT).show();40                     foStream.flush();41                     foStream.close();42                 }catch(Exception e){43                     e.printStackTrace();44                 }45             }46         });47         btnRead.setOnClickListener(new View.OnClickListener() {48             @Override49             public void onClick(View view) {50                 fileName = etName.getText().toString();51                 try{52                     FileInputStream fiStream = openFileInput(fileName);53                     int len = fiStream.available();54                     byte[] buffer = new byte[len];55                     fiStream.read(buffer);56                     etContent.setText(new String(buffer));57                     Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();58                     fiStream.close();59                 }catch(Exception e){60                     e.printStackTrace();61                 }62             }63         });64 65     }66 }
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 3     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 4     android:paddingRight="@dimen/activity_horizontal_margin" 5     android:paddingTop="@dimen/activity_vertical_margin" 6     android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 7  8  9     <EditText10         android:layout_width="wrap_content"11         android:layout_height="wrap_content"12         android:id="@+id/etName"13         android:layout_alignParentTop="true"14         android:layout_alignParentLeft="true"15         android:layout_alignParentStart="true"16         android:layout_alignParentRight="true"17         android:layout_alignParentEnd="true"18         android:text="文件名" />19 20     <EditText21         android:layout_width="wrap_content"22         android:layout_height="wrap_content"23         android:id="@+id/etContent"24         android:layout_below="@+id/etName"25         android:layout_alignParentLeft="true"26         android:layout_alignParentStart="true"27         android:layout_alignParentRight="true"28         android:layout_alignParentEnd="true"29         android:text="文件内容" />30 31     <Button32         android:layout_width="wrap_content"33         android:layout_height="wrap_content"34         android:text="保存"35         android:id="@+id/btnWrite"36         android:layout_alignTop="@+id/btnRead"37         android:layout_toLeftOf="@+id/btnRead"38         android:layout_toStartOf="@+id/btnRead" />39 40     <Button41         android:layout_width="wrap_content"42         android:layout_height="wrap_content"43         android:text="读取"44         android:id="@+id/btnRead"45         android:layout_below="@+id/etContent"46         android:layout_alignParentRight="true"47         android:layout_alignParentEnd="true" />48 </RelativeLayout>
activity_main.xml

 

  相关解决方案