数据储存(1):文件存储,保存至/data/data/"package_name"/files/目录下
来源:互联网 发布:mac更换登录帐号 编辑:程序博客网 时间:2024/05/22 09:03
前提:最近遇到一个小的DVB项目,虽然数据都是有底层提供给我们的,但是应用层还是要对一些基本的数据进行处理,例如保存上次一播放的频道号,下一次记忆播放等。所以就需要做一些简单的数据存储。然后也想对Android的数据存储做一个总结,也算是自己做的笔记。
首先是文件存储,就是将一些简单的文本数据保存下来,例如频道号等等当然也可以用来存储稍微复杂一点的数据,例如一个json,如果是json可是数据就需要自己解析的时候定义一个规范。此博客以简单的文本消息为例。
转载请注明出处http://blog.csdn.net/Zou_pl/article/details/73921092
将数据以Java流的格式写入文件和读取。
简单的布局,可以忽略:
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout 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="www.sunniwell.net.testdatastorage.MainActivity"> <LinearLayout android:layout_width="368dp" android:layout_height="wrap_content" android:layout_marginRight="0dp" android:layout_marginTop="0dp" android:orientation="horizontal" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" > <EditText android:id="@+id/edt_data_save" android:layout_width="0dp" android:layout_weight="8" android:layout_height="wrap_content" android:textSize="25sp" android:hint="Type what you want..."/> <Button android:id="@+id/btn_data_save" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" android:text="Data Save "/> <Button android:id="@+id/btn_data_show" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" android:text="Data Show "/> </LinearLayout></android.support.constraint.ConstraintLayout>
就是一个EditText输入你要保存的文本,然后一个Button点击保存,Yi个Button点击展示:
package www.sunniwell.net.testdatastorage;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.view.View;import android.widget.Button;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.OutputStreamWriter;public class MainActivity extends AppCompatActivity { private EditText mDataEditText = null; private Button mDataSaveButton = null; private Button mDataShowButton = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDataViews(); } private void initDataViews() { mDataEditText = (EditText)findViewById(R.id.edt_data_save); mDataSaveButton = (Button)findViewById(R.id.btn_data_save); mDataSaveButton.setOnClickListener(mDataButtonClickListener); mDataShowButton = (Button)findViewById(R.id.btn_data_show); mDataShowButton.setOnClickListener(mDataButtonClickListener); } private View.OnClickListener mDataButtonClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (null != v) { switch (v.getId()) { case R.id.btn_data_save: { //点击保存按钮,拿到需要保存的文本,进行保存 String content = mDataEditText.getText().toString(); saveStringToData("DataStorage",content); } break; case R.id.btn_data_show: { //点击显示按钮,Toast出来保存的内容 String result = getStringFromData("DataStorage"); if (TextUtils.isEmpty(result)) { Toast.makeText(MainActivity.this, "get Nothing", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "get:"+result, Toast.LENGTH_SHORT).show(); } } } } } }; ... ...}
上面是处理的逻辑,重点看saveStringToData(“DataStorage”,content)和getStringFromData(“DataStorage”)方法:
写:
private void saveStringToData(String fineName ,String content) { FileOutputStream fileOutputStream = null; BufferedWriter bufferedWriter = null; try { /** * 1、首先通过openFileOutput()方法返回一个FileOutputStream对象 * 需要传入两个参数: * ①文件名,文件创建的时候使用这个名称,默认文件保存在/data/data/包名/files/目录下 * ②:文件的操作模式:MODE_PRIVATE表示当再次储存指定同样文件名时,所写的内容会覆盖源=原文件内容 * MODE_APPEND表示当次储存指定同样文件名时,如果已经存在该文件,会在以往文件中追加内容 * MODE_WORLD_READABLE、MODE_WORLD_READABLE不推荐 *2、得到FileOutputStream对象,来新建OutputStreamWriter对象,来新建BufferedWriter对象 * 3、使用BufferedWriter对象储存 * openFileOutput()-FileOutputStream-OutputStreamWriter-BufferedWriter * */ fileOutputStream = openFileOutput(fineName,MODE_PRIVATE); bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream)); bufferedWriter.write(content); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedWriter != null) { try { bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } }
读:
private String getStringFromData(String fileName) { StringBuilder stringBuilder = new StringBuilder(); FileInputStream fileInputStream = null; BufferedReader bufferedReader = null; try { /** * openFileInput() - FileInputStream - InputStreamReader - BufferedReader * BufferedReader..readLine()逐行读取 * * */ fileInputStream = openFileInput(fileName); bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); String line = ""; try { while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } return stringBuilder.toString(); }
例如openFileOutput()方法的文件的操作模式:MODE_PRIVATE表示当再次储存指定同样文件名时,所写的内容会覆盖原文件内容,MODE_APPEND表示当次储存指定同样文件名时,如果已经存在该文件,会在以往文件中追加内容,MODE_WORLD_READABLE、MODE_WORLD_READABLE不推荐。
先看:MODE_PRIVATE的结果:
在看MODE_APPEND的结果:
最后:对于一些简单或者不长的文本我想这种存储方式就够了,特别时候用于一些轻量级的项目中。如果数据比较多,也可以一json的格式存储读取并解析,例如:{“title”: “test local data”,”url”: “http://106.14.47.XX:5002/XX.ts“,”duration”: 2000}。
- 数据储存(1):文件存储,保存至/data/data/"package_name"/files/目录下
- 怎样向android手机/data/data/package_name/目录下拷贝文件
- android 将数据缓存在文件中,放在/data/data/<package name>/files目录下
- android开发data/data/文件包/files下的保存,删除,获取文件
- 下载apk文件在/data/data/packagename/files/目录下,如何安装成功
- 下载apk文件在/data/data/packagename/files/目录下,如何安装成功
- android webview加载/data/data/pkg/files/目录下html文件
- data/data/目录下的私有数据
- 文件存取 data/data/包名/files
- 从apk的raw文件夹里copy文件到手机储存(应用程序的data下)
- Android里查看/data/data目录下所有文件
- android asserts文件读出到 /data/data/pkg/目录下
- adb如何获取手机data/data目录下的文件
- adb如何获取手机data/data目录下的文件
- 如何使用DDMS读取data/data目录下的文件
- 读写data目录下的文件
- 把Data数据存储为文件
- Data Files
- TabLayout选中
- CentOS 升级 gcc 和 g++ 的方法
- Conf iguration problem: Failed to import bean definitions from relative location [red is-context.xml
- webview适配手机
- 向指定URL发送POST,GET请求
- 数据储存(1):文件存储,保存至/data/data/"package_name"/files/目录下
- 垃圾D题 啊啊啊啊CodeForces
- Oracle优化器、优化模式、表的连接方式(Hash Join、Nested Loop、Sort Merge Join)
- C++中重载、重写(覆盖)和隐藏的区别
- jqgrid 根据iRow获取唯一的rowid 以及互转
- 字符串分割--java中String.split()用法
- GBK与UTF-8的区别
- 设计模式之组合模式(Composite)
- 在Linux环境下搭建Tomcat+mysql+jdk环境