【Android-Android文件存储之将数据保存在data目录下】宁可枝头抱香死,何曾吹落北风中。这篇文章主要讲述Android-Android文件存储之将数据保存在data目录下相关的知识,希望能为你提供帮助。
在平常使用android手机的时候,我们都知道,几乎每一个app都在/data/data/<
相应的包名>
的文件夹下保存数据。那这些数据怎么进行保存的呢?在这里,将简单的介绍一下。
文章图片
1.将数据保存在文件中
Context类中有一个openFileOutPut方法,这个方法可以将我们的数据保存在data目录下的文件里面。
openFileOutput(String name, int mode)方法中带两个参数,第一个参数是文件名,这里只能写文件的名字,不能包含路径,因为所有的数据都保存在/data/data/< 应用包名> /files/目录下;第二个参数是文件的操作模式,有MDOE_PRIVATE,MODE_APPEND,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。
其中MODE_PRIVATE模式的是默认的操作模式,每一次写入的内容时,都会覆盖前面的内容;MODE_APPEND模式表示的是每次写入的内容追加在前面的后面;MODE_WORLD_READABLE表示的是其他应用程序可以对该文件进行写的操作;MODE_WORLD_WRITEABLE表示的是其他应用程序可以对该文件进行读的操作。不过在后面的两种模式过于危险,google已经在Android 4.2中废弃了。
openFileOutput()方法返回的是一个FileOutPutStream的对象,得到了这个对象,就可以使用java的IO流来对文件的使用了。
1 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 2private Button mButton = null; 3 4@Override 5protected void onCreate(@Nullable Bundle savedInstanceState) { 6super.onCreate(savedInstanceState); 7setContentView(R.layout.activity_main); 8mButton = (Button) findViewById(R.id.id_button); 9mButton.setOnClickListener(this); 10} 11 12@Override 13public void onClick(View v) { 14BufferedWriter bw = null; 15FileOutputStream fos = null; 16try { 17String string = "pby 的数据"; 18fos = openFileOutput("pby", MODE_PRIVATE); 19bw = new BufferedWriter(new OutputStreamWriter(fos)); 20bw.write(string); 21} catch (FileNotFoundException e) { 22e.printStackTrace(); 23} catch (IOException e) { 24e.printStackTrace(); 25} finally { 26if (bw != null) { 27try { 28bw.close(); 29} catch (IOException e) { 30e.printStackTrace(); 31} 32} 33if (fos != null) { 34try { 35fos.close(); 36} catch (IOException e) { 37e.printStackTrace(); 38} 39} 40 41} 42 43} 44 }
1 < ?xml version="1.0" encoding="utf-8"?> 2 < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3android:layout_width="match_parent" 4android:layout_height="match_parent" 5android:gravity="center" 6android:orientation="vertical"> 7 8< Button 9android:id="@+id/id_button" 10android:layout_width="match_parent" 11android:layout_height="wrap_content" 12android:text="保存" /> 13 < /LinearLayout>
点击保存过后,就会把我们的数据保存在data目录下。
如果我们想要查看的话,就可以在Android studio(我是2.3.2的版本)中找到Tools-> Android-> Android Device Monitor
文章图片
再打开/data/data/< 应用包名> /files/,发现有一个文件,就是我们之前创建的一个文件。
我们可以点击
文章图片
,对相应的文件进行导出操作。
注:
如果打开/data/文件夹是一个空的话,表示模拟器没有root,必须获得root权限。具体的操作会在后续的文章中介绍。
2.从文件中读取数据
在Context类中,与openFileOutput方法对应的是openFileInput方法,用户从data目录读取相应的数据。这个方法相较于openFileOutput方法简单一些。
1 < ?xml version="1.0" encoding="utf-8"?> 2 < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3android:layout_width="match_parent" 4android:layout_height="match_parent" 5android:gravity="center" 6android:orientation="vertical"> 7 8< Button 9android:id="@+id/id_save" 10android:layout_width="match_parent" 11android:layout_height="wrap_content" 12android:text="保存" /> 13 14< Button 15android:id="@+id/id_load" 16android:layout_width="match_parent" 17android:layout_height="wrap_content" 18android:text="加载" /> 19< TextView 20android:id="@+id/id_textView" 21android:textSize="30sp" 22android:gravity="center" 23android:layout_width="match_parent" 24android:layout_height="100dp" /> 25 < /LinearLayout>
1 package com.example.android_demo; 2 3 import android.os.Bundle; 4 import android.support.annotation.Nullable; 5 import android.support.v7.app.AppCompatActivity; 6 import android.view.View; 7 import android.widget.Button; 8 import android.widget.TextView; 9 10 import java.io.BufferedReader; 11 import java.io.BufferedWriter; 12 import java.io.FileInputStream; 13 import java.io.FileNotFoundException; 14 import java.io.FileOutputStream; 15 import java.io.IOException; 16 import java.io.InputStreamReader; 17 import java.io.OutputStreamWriter; 18 19 20 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 21private Button mButtonSave = null; 22private Button mButtonLoad = null; 23private TextView mTextView = null; 24@Override 25protected void onCreate(@Nullable Bundle savedInstanceState) { 26super.onCreate(savedInstanceState); 27setContentView(R.layout.activity_main); 28mButtonSave = (Button) findViewById(R.id.id_save); 29mButtonSave.setOnClickListener(this); 30mButtonLoad = (Button) findViewById(R.id.id_load); 31mButtonLoad.setOnClickListener(this); 32mTextView = (TextView) findViewById(R.id.id_textView); 33} 34 35@Override 36public void onClick(View v) { 37switch (v.getId()) 38{ 39case R.id.id_save: 40{ 41save(); 42break; 43} 44case R.id.id_load: 45{ 46load(); 47break; 48} 49} 50 51} 52private void save() 53{ 54BufferedWriter bw = null; 55FileOutputStream fos = null; 56try { 57String string = "pby 的数据"; 58fos = openFileOutput("pby", MODE_PRIVATE); 59bw = new BufferedWriter(new OutputStreamWriter(fos)); 60bw.write(string); 61} catch (FileNotFoundException e) { 62e.printStackTrace(); 63} catch (IOException e) { 64e.printStackTrace(); 65} finally { 66if (bw != null) { 67try { 68bw.close(); 69} catch (IOException e) { 70e.printStackTrace(); 71} 72} 73if (fos != null) { 74try { 75fos.close(); 76} catch (IOException e) { 77e.printStackTrace(); 78} 79} 80 81} 82} 83private void load() 84{ 85BufferedReader br = null; 86FileInputStream fis = null; 87try 88{ 89String content = null; 90fis = openFileInput("pby"); 91br = new BufferedReader(new InputStreamReader(fis)); 92content= br.readLine(); 93mTextView.setText(content); 94}catch(FileNotFoundException e) 95{ 96e.printStackTrace(); 97} catch (IOException e) { 98e.printStackTrace(); 99} 100finally{ 101if(br != null) 102{ 103try { 104br.close(); 105} catch (IOException e) { 106e.printStackTrace(); 107} 108} 109if(fis != null) 110{ 111try { 112fis.close(); 113} catch (IOException e) { 114e.printStackTrace(); 115} 116} 117} 118} 119 }
效果示意图
文章图片
推荐阅读
- 基于蓝牙的安卓客户端开发
- Android Studio怎样改动快捷键
- Android的一些方法和属性
- 深度优先搜索(DFS)算法
- 数据挖掘(决策树归纳)
- 适用于JavaScript开发人员的最佳VS Code扩展合集
- 深入研究随机森林分类算法(详细教程)
- 用于分类的顶级机器学习算法有哪些(详细列表)
- 如何构建换脸应用程序(计算机视觉算法)