【Android Studio】数据持久化(一)文件存储
Java
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.widget.EditText; import android.widget.Toast; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; public class MainActivity extends AppCompatActivity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText=findViewById(R.id.edit); //读取上一次数据 String oldInput=load(); if(!TextUtils.isEmpty(oldInput)){ editText.setText(oldInput); //调整光标到最末尾 editText.setSelection(oldInput.length()); Toast.makeText(this,"Restoring succeeded",Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { super.onDestroy(); //销毁前保存输入的数据 String inputText =editText.getText().toString(); //调用方法保存 save(inputText); } public void save(String inputText){ FileOutputStream out=null; BufferedWriter writer=null; try{ //通过openFileOutput得到一个FileOutputStream对象,往文件名称为data写入数据 out=openFileOutput("data", Context.MODE_PRIVATE); //通过BufferedWriter和OutputStreamWriter创建一个BufferedWriter对象 writer=new BufferedWriter(new OutputStreamWriter(out)); //通过这个BufferedWriter对象来写入数据 writer.write(inputText); } catch (IOException e) { e.printStackTrace(); } finally { try { if(writer!=null){ //关闭writer writer.close(); } }catch (IOException e){ e.printStackTrace(); } } } public String load(){ FileInputStream in=null; BufferedReader reader=null; //读取到的数据保存在这里 StringBuilder stringBuilder=new StringBuilder(); try{ in=openFileInput("data"); reader=new BufferedReader(new InputStreamReader(in)); //以一行为单位进行保存 String line=""; //先读一行然后保存在line上,如果line不为空就添加入stringBuilder中 while ((line=reader.readLine())!=null){ stringBuilder.append(line); } } catch (IOException e) { e.printStackTrace(); }finally { if(reader!=null){ try { reader.close(); }catch (IOException e){ e.printStackTrace(); } } } return stringBuilder.toString(); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 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" tools:context=".MainActivity"> <EditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="试着输写什么"/> </LinearLayout>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了