一、权限问题


  手机中存储空间分为ROM和SDcard,ROM中放着操作系统以及我们安装的APP,而sdcard中一般放置着我们APP产生的数据。当然,Android也为每个APP在ROM中创建一个数据存储空间,具体目录是/data/data下。在真机中调试中,该目录对于其他用户是没有开启任何权限,所以在DDMS中我们是打不开该目录的。

  解决方案就是我们通过adb登录到我们手机上,然后直接切换到root用户,这时后手机可能会询问是否授权,我们则选择允许。这样我们就成为root用户了。然后我们在更改/data目录的权限,这样就能在DDMS上看到/data下的内容了。具体操纵如下:

二、布局设置


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. android:orientation="vertical"
  11. tools:context="xidian.dy.com.chujia.MainActivity">
  12. <EditText
  13. android:id="@+id/username"
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. android:hint="请输入用户名"/>
  17. <EditText
  18. android:id="@+id/password"
  19. android:inputType="textPassword"
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"
  22. android:hint="请输入密码"/>
  23. <RelativeLayout
  24. android:layout_width="match_parent"
  25. android:layout_height="wrap_content"
  26. android:orientation="horizontal">
  27. <CheckBox
  28. android:id="@+id/remember"
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:text="记住用户名和密码"
  32. android:layout_centerVertical="true"/>
  33. <Button
  34. android:id="@+id/login"
  35. android:layout_alignParentRight="true"
  36. android:layout_width="wrap_content"
  37. android:layout_height="wrap_content"
  38. android:text="登录"/>
  39. </RelativeLayout>
  40. </LinearLayout>

三、java代码


  1. package xidian.dy.com.chujia;
  2.  
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.telephony.SmsManager;
  6. import android.util.Log;
  7. import android.util.PrintWriterPrinter;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.CheckBox;
  11. import android.widget.EditText;
  12. import android.widget.Toast;
  13.  
  14. import java.io.BufferedWriter;
  15. import java.io.File;
  16. import java.io.FileNotFoundException;
  17. import java.io.FileOutputStream;
  18. import java.io.OutputStreamWriter;
  19. import java.io.PrintWriter;
  20. import java.util.List;
  21.  
  22. public class MainActivity extends AppCompatActivity {
  23.  
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28. Button bt = (Button) findViewById(R.id.login);
  29. bt.setOnClickListener(new View.OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. EditText etUsername = (EditText) findViewById(R.id.username);
  33. String username = etUsername.getText().toString();
  34. EditText etPassword = (EditText) findViewById(R.id.password);
  35. String password = etPassword.getText().toString();
  36. Log.e("Login", "登录成功");
  37. CheckBox cb = (CheckBox) findViewById(R.id.remember);
  38. if(cb.isChecked()){
  39. String path = "/data/data/xidian.dy.com.chujia/info.txt";
  40. File file = new File(path);
  41. PrintWriter pw = null;
  42. try {
  43. pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))));
  44. } catch (FileNotFoundException e) {
  45. Log.e("MainActivity","file not found");
  46. }
  47. pw.println(username);
  48. pw.println(password);
  49. pw.close();
  50. }
  51.  
  52. }
  53. });
  54. }
  55. }

  Android为每个app在/data/data下创建一个文件夹,文件夹的名字就是APP的包名。我们的APP报名为xidian.dy.com.chujia,所以为了保存用户数据,我在/data/data/xidian.dy.com.chujia/创建一个infro.txt文件夹,然后将用户名和密码包存到该文件夹下。对用户名和密码的保存就使用普通的java IO流即可。

三、文件之读操作


使用普通的IO流将info.txt文件中的数据读取出来,这里不牵扯读写权限问题,因为该线程的所属用户是对自己的目录进行操作的。

  1. package xidian.dy.com.chujia;
  2.  
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.CheckBox;
  9. import android.widget.EditText;
  10.  
  11. import java.io.BufferedReader;
  12. import java.io.BufferedWriter;
  13. import java.io.File;
  14. import java.io.FileInputStream;
  15. import java.io.FileNotFoundException;
  16. import java.io.FileOutputStream;
  17. import java.io.IOException;
  18. import java.io.InputStreamReader;
  19. import java.io.OutputStreamWriter;
  20. import java.io.PrintWriter;
  21.  
  22. public class MainActivity extends AppCompatActivity {
  23.  
  24. private EditText etUsername;
  25. private EditText etPassword;
  26.  
  27. @Override
  28. protected void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_main);
  31. Button bt = (Button) findViewById(R.id.login);
  32. etUsername = (EditText) findViewById(R.id.username);
  33. etPassword = (EditText) findViewById(R.id.password);
  34. if (bt != null)
  35. bt.setOnClickListener(new View.OnClickListener() {
  36. @Override
  37. public void onClick(View v) {
  38. String username = null;
  39. String password = null;
  40. if (etUsername != null)
  41. username = etUsername.getText().toString();
  42. if (etPassword != null)
  43. password = etPassword.getText().toString();
  44. Log.e("Login", "登录成功");
  45. CheckBox cb = (CheckBox) findViewById(R.id.remember);
  46. if (cb != null && cb.isChecked()) {
  47. File file = new File(getFilesDir(), "info.txt");
  48. PrintWriter pw;
  49. try {
  50. pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))));
  51. pw.println(username);
  52. pw.println(password);
  53. pw.close();
  54. } catch (FileNotFoundException e) {
  55. Log.e("MainActivity", "file not found");
  56. }
  57. }
  58. }
  59. });
  60. this.readAccount();
  61. }
  62.  
  63. public void readAccount() {
  64. File file = new File(getFilesDir(), "info.txt");
  65. if (file.exists()) {
  66. try {
  67. BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
  68. String str = br.readLine();
  69. if (etUsername != null)
  70. etUsername.setText(str);
  71. str = br.readLine();
  72. if (etPassword != null)
  73. etPassword.setText(str);
  74. br.close();
  75. } catch (IOException e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. }
  80. }

android之文件存储和读取的更多相关文章

  1. Linux基础篇学习——Linux文件系统之文件存储与读取:inode,block,superblock

    Linux文件类型 代表符号 含义 - 常规文件,即file d directory,目录文件 b block device,块设备文件,支持以"block"为单位进行随机访问 c ...

  2. 【Android】14.2 外部文件存储和读取

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 1.基本概念 内部存储的私有可用存储空间一般都不会很大,对于容量比较大的文件,例如视频等,应该将其存储在外部存储设 ...

  3. 【Android】14.1 内部文件存储和读取

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 内部存储(Internal storage)是指将应用程序建立的私有文件保存在内部存储器(移动经销商卖的那种容量较 ...

  4. 19.Android之文件存储方法学习

    Android开发中会用到文件存储,今天来学习下. 先改下布局界面: <?xml version="1.0" encoding="utf-8"?> ...

  5. Android学习——文件存储

    在Andriod开发中,文件存储和Java的文件存储类似.但需要注意的是,为了防止产生碎片垃圾,在创建文件时,要尽量使用系统给出的函数进行创建,这样当APP被卸载后,系统可以将这些文件统一删除掉.获取 ...

  6. Android File文件存储功能

    1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompa ...

  7. android 开发-文件存储之读写sdcard

    android提供对可移除的外部存储进行文件存储.在对外部sdcard进行调用的时候首先要调用Environment.getExternalStorageState()检查sdcard的可用状态.通过 ...

  8. Android使用文件存储数据

    Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...

  9. Android 使用SQLite存储以及读取Drawable对象

    在进行Android开发过程中,我们经常会接触到Drawable对象,那么,若要使用数据库来进行存储及读取,该如何实现? 一.存储 //第一步,将Drawable对象转化为Bitmap对象 Bitma ...

随机推荐

  1. Python基础之函数等等

    三元运算 三元运算(三目运算),是对简单的条件语句的缩写. 1 2 3 4 5 # 书写格式   result = 值1 if 条件 else 值2   # 如果条件成立,那么将 "值1&q ...

  2. 一个fork的面试题

    前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下.这个题是这样的: 题目:请问下面的程序一共输出多 ...

  3. java并发编程实践笔记

    文章转自:http://kenwublog.com/java-concurrency-in-practise-note 1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 ...

  4. appium 常用api介绍(2)

    前言:接着上一篇继续讲常用的一些api 参考博文:http://blog.csdn.net/bear_w/article/details/50330565 1.send_keys send_keys( ...

  5. Java语法结构

    一.顺序结构(从上往下依次执行) 顺序结构语法比较简单,从上往下依次执行即可. 二.选择结构(选择性执行,如果....则.....) 1.if 语句 if语句,作用是根据判断结果为真或假,选择其中一个 ...

  6. Mybatis框架_part1

    mybatis介绍 mybatis就是一个封装了jdbc的持久层框架,它的前身是ibatis.Mybatis与hibernate一样都是持久层框架,但是它与hibernate不同的是,它不是一个完全的 ...

  7. 边工作边刷题:70天一遍leetcode: day 85-2

    Paint Fence 要点: 这题是求number of ways,如果是相邻不相同颜色,那么就trivial了:k*(k-1)^(n-1).所以这里no more than two adjacen ...

  8. 对Spring的IoC和DI最生动的解释

    首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系 ...

  9. 测试 Mono 安装

    测试 Mono 安装 为了测试核心编译器(mcs)和运行时(mono),应该创建一个简单的程序并编译它.可以在喜欢的任何文本编辑器中创建程序.这里采用一种快速而简陋的方法创建该文件(虽然没有任何格式化 ...

  10. 迷你DVD管理器项目

    package chapter5; import java.util.*; public class MiniDVD { public static void main(String[] args){ ...