android 7 写文件,Android 入门(7)——文件持久化存储

我们在编程的时候,难免会遇到数据保存的情况。例如,当我们与别人进行聊天的时候,发送的消息或者接收到的消息,肯定不能发完之后切换一个页面,再切换回来之后就消失了。想必那样的程序一定是让人抓狂的。

这篇文章我们将介绍一下Android的两种简单的文件存储方式

文件存储

SharedPreferences 存储

将数据存储在文件中

Android提供了一个函数openFileOutPut用于进行文件创建与打开,这个函数有两个参数,一个是文件的名字,另一个是打开的方式。

Context.MODE_PRIVATE(默认模式,打开文件并覆盖写入)

Context.MODE_APPEND(后加模式,打开文件并追加到后面)

openFileOutPut返回一个FileOutputStream对象

然后利用BufferedWriter的write方法将数据写入文件中

示例

创建一个新的项目FileIOTest,打开active_main.xml编写以下界面

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

android:id="@+id/put_data"

android:hint="output data"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/get_data"

android:hint="input data"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/put_button"

android:text="put"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/get_button"

android:text="get"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

效果

6bff22bf37b4

效果图

接下来打开MainActivity.java,进行我们的主代码编写

public class MainActivity extends AppCompatActivity {

private Button getButton;

private Button putButton;

private EditText putEdit;

private EditText getEdit;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

getButton = (Button)findViewById(R.id.get_button);

putButton = (Button)findViewById(R.id.put_button);

putEdit = (EditText)findViewById(R.id.put_data);

getEdit = (EditText)findViewById(R.id.get_data);

putButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String getData = putEdit.getText().toString();

saveData(getData);

}

});

}

void saveData(String inputText){

FileOutputStream out = null;

BufferedWriter writer = null;

try{

out = openFileOutput("data",Context.MODE_APPEND);

writer = new BufferedWriter(new OutputStreamWriter(out));

writer.write(inputText);

}catch (IOException e){

e.printStackTrace();

}finally {

try{

if(writer !=null){

writer.close();

}

}catch (IOException e){

e.printStackTrace();

}

}

}

void getData(){

String get_Data = "";

}

}

代码有点长,我们分开来看。首先看oncreate函数里面。我们主要是获取了每一个控件的引用,并且给putButton设置点击事件。

然后获取FileOutPutStream对象,利用这个对象初始化写入对象BufferedWriter。

最后利用writer.write(data)写入。

从文件中获取数据

由于只是写入数据不够全面,这里将获取数据一同作为一个整体讲解。

Android给我们同样提供了读取数据函数openFileInput,这个函数指需要传进去一个参数,就是文件名。

使用也很简单,通过openFileInput获取FileInputString对象,利用FileInputStream对象初始化BufferedReader,然后利用BufferedReader的readLine读取数据。

String getData(){

String inputString= "";

FileInputStream in = null;

BufferedReader reader = null;

StringBuilder builder = new StringBuilder();

try{

in = openFileInput("data");

reader = new BufferedReader(new InputStreamReader(in));

while((inputString = reader.readLine())!=null){

builder.append(inputString);

}

}catch (IOException e){

e.printStackTrace();

}finally {

if(reader!=null){

try {

reader.close();

}catch (IOException e){

e.printStackTrace();

}

}

}

return builder.toString();

}

上述代码实现读取data文件并且将所有数据都读出来

在主函数进行点击事件写入

getButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String getString = getData();

getEdit.setText(getString);

}

});

效果

输入三次数据,第一次输入firstdata,第二次seconddata,第三次thirddata,最后获取所有输入的数据,即为测试成功

6bff22bf37b4

测试

使用SharedPerferences

SharedPerferences存储文件格式为xml

存储格式为键、值对。

Context中getSharedPerferences,第一个用于指定存储文件名,第二个用于打开文件格式。

目前打开格式只有:MODE_PRIVATE

使用步骤:

调用SharedPreferences对象的edit()函数返回一个SharedPreferenced.Editor对象

利用各种put函数向SharedPreferences.Editor中传入数据

如传入String使用putString()。

使用apply()提交数据。

制作简单界面

6bff22bf37b4

界面

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:id="@+id/your_id"

android:hint="Id"

android:layout_width="0sp"

android:layout_height="wrap_content"

android:layout_weight="1"/>

android:id="@+id/your_password"

android:hint="Password"

android:layout_width="0sp"

android:layout_height="wrap_content"

android:layout_weight="1"/>

android:id="@+id/button"

android:text="set_Message"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

主函数

public class MainActivity extends AppCompatActivity {

Button button;

EditText idEdit;

EditText passwordEdit;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button =(Button)findViewById(R.id.button);

idEdit = (EditText)findViewById(R.id.your_id);

passwordEdit = (EditText)findViewById(R.id.your_password);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String Id = idEdit.getText().toString();

String Password = passwordEdit.getText().toString();

SharedPreferences.Editor editor = getSharedPreferences("DataList",MODE_PRIVATE).edit();

editor.putString("Id",Id);

editor.putString("password",Password);

editor.apply();

}

});

}

}

输入数据

6bff22bf37b4

使用

查看DataList.xml

4787897894984

154967797

获取存入的数据也很简单,使用getSharedPreferences获取SharedPreferences对象,然后使用getString(键)来获取相应的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值