下面是具体代码,其中MainActivity.java的部分代码有修改,在文章后面给出

logindemo_layout.java

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/background1"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:padding="30dp"
android:orientation="vertical"> <TextView
android:layout_width="wrap_content"
android:layout_marginLeft="30dp"
android:drawableLeft="@mipmap/ic_launcher_round"
android:text="家庭记账本"
android:textSize="40sp"
android:layout_height="wrap_content"/> <EditText
android:layout_width="match_parent"
android:layout_marginTop="30dp"
android:id="@+id/et_username"
android:layout_height="wrap_content"
android:hint="用户名" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_password"
android:hint="密码" />
<Button
android:layout_width="match_parent"
android:text="登录"
android:textSize="20sp"
android:id="@+id/bt_login"
android:layout_height="wrap_content"/> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="没有账号,立即去注册"
android:textColor="#00ffff"
android:textSize="16sp" />
</RelativeLayout> </LinearLayout> </RelativeLayout>

MainActivity.java

  package com.example.logindemo;

import androidx.appcompat.app.AppCompatActivity;

import android.nfc.Tag;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { private static final String TAG ="MainActivity";
private TextView mUsername;
private TextView mPassword;
private Button mLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logindemo_layout);
//第一步,找到控件
initViews();
//第二步,给我们的登录按钮设置监听事件
initListener();
} /**
* 这个方法,我们用来找对应的控件
*/
private void initViews(){
mUsername= (TextView)this.findViewById(R.id.et_username);
mPassword= (TextView)this.findViewById(R.id.et_password);
mLogin = (Button)this.findViewById(R.id.bt_login);
}
/**
* 这个方法就是给登录按钮设置点击的监听
*/
private void initListener(){
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"点击了登录按钮");
handlerLoginEvent(v);
}
});
} /**
* 处理登录事件
* @param v
*/
private void handlerLoginEvent(View v) {
//第三部,我们要拿到界面上的信息,包括账号和密码
//账号
String usernameText =mUsername.getText().toString();
//密码
String passwordText =mPassword.getText().toString();
//把账号和密码保存起来
saveUserInfo(usernameText,passwordText);
}
private void saveUserInfo(String usernameText,String passwordText){
Log.d(TAG,"保存用户信息");
File file =new File("info.txt");
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
//以特定的格式存储
fileOutputStream.write((usernameText+"***"+passwordText).getBytes());
fileOutputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}

点击登录后,发现程序崩了

为什么我们直接写一个文件名的时候,去写文件,报出的异常是read-only。
在安卓系统中,每一个应用就相当于一个用户,每个用户(应用)的权限是特定的,不能够操作其它应用的内容

找到我们的项目

查看我们的info文件应该存放的目录

修改其中saveUserInfo方法

private void saveUserInfo(String usernameText,String passwordText){
Log.d(TAG,"保存用户信息");
try {
File file =new File("/data/data/com.example.logindemo/info.txt");
if(file.exists()){
file.createNewFile();
}
FileOutputStream fileOutputStream = new FileOutputStream(file);
//以特定的格式存储
fileOutputStream.write((usernameText+"***"+passwordText).getBytes());
fileOutputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}

点击登录

查看发现info.txt文件,且内容为zzw***123说明保存成功。

还有另一种方法

通过Android Devices Monitor查看

https://www.cnblogs.com/rivers-enduring/p/9212111.html

打开后,在File Explorer下找到包/data/data/com.example.logindemo/

选中info.txt,右上角有导出

导出到桌面,进行查看

Android将数据存储到应用的数据目录下的更多相关文章

  1. Android中数据存储(一)

    国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM ...

  2. Android本地数据存储复习

    Android本地数据存储复习 Android无论是应用层还是系统层都需要在本地保存一些数据,尤其在应用层中使用的就更为普遍,大体有这么几种:SharedPreference,file,sqlite数 ...

  3. android学习笔记45——android的数据存储和IO

    android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...

  4. Android实现数据存储技术

    转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...

  5. android中数据存储

    android中数据存储     Android 中存储数据的方式有五种:SQLite数据库.文件存储.内容提供者.网络.SharedPreferences(Key----value)五种存储方式. ...

  6. Android中数据存储(四)——ContentProvider存储数据

    目录(?)[+]   当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...

  7. Android中数据存储(三)——SQLite数据库存储数据

    当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...

  8. 关于Android开发数据存储的方式(一)

    关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方 ...

  9. Android本地数据存储: ASimpleCache

    一:前言 在上一篇博客Android本地数据存储: Reservoir 博客中,我提到,除了Reservoir库,还可以采用ASimpleCache开源库,来实现本地数据存储.昨天并没有仔细的对比Re ...

随机推荐

  1. stackADT

    stack.h #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include <stdbool.h> typedef struct ...

  2. git 操作详情

    Git 教程 1.Git 是一个开源的分布式版本控制系统 2.Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源版本控制软件 3.Git 与常用的版本控制工具 ...

  3. bootstrap标记说明

    <span class="caret"> 这就是 一个倒三角

  4. JS获取光标在input 或 texterea 中下标位置

    <textarea placeholder="请输入表达式" id="methodInput" ></textarea> 获取位置: v ...

  5. 第二节: Vuejs常用特性1

    一. 常用特性 1. 表单元素 通过 v-model指令绑定 输入框.单选/多选框.下拉框.文本框 2. 表单域修饰符 (1) .number:转换成数值,如果输入的是非数字字符串时,无法进行转换 ( ...

  6. 蓝桥杯 K好数

    如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22.30.3 ...

  7. Redis 简易消息队列

    为了保持程序的高效,建议使用ProtoBuf. Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48, ...

  8. 苹果应用商店AppStore审核规则指南

    http://www.zesmob.com/blog/40161.html 新应用上架苹果AppStore或重大版本更新时,往往会被拒多次,造成审核不通过的原因,主要是因为对苹果应用商店AppStor ...

  9. CSP2019 滚粗记

    目录 CSP 2019 游记 DAY 0 DAY 1 DAY 2 CSP总结 自测之后 CSP 2019 游记 坐标:GD,GZ 人物:hyf 组别:J和S 任务:划水 目标:划水 任务奖励:退役证书 ...

  10. CentOS7.3下载地址

    CentOS 7.3,是CentOS-7系列的第四个发行版本,官方版本号为7.3.1611.该版本的安装映像只有 64 位,具体的安装映像有以下几种: DVD版 推荐(迅雷下载):http://arc ...