内部存储的读操作及使用API获得路径
来源:互联网 发布:广电直播软件 编辑:程序博客网 时间:2024/06/05 20:18
在内文件写操作博客中存在着一些问题,如下图所示,那就是在我们按下back键,再次打开时应用不进行回显,而按下home键时再次打开则可以回显,这是因为我们在按下back键后activity结束,再次打开时是重新创建了一个activity,而home键则是使activity进入后台运行而没有进入finish()状态,现在我们通过对内部txt文件的读取信息来使界面能够进行回显。
新增的读代码
public void readAcount(){ File file=new File("data/data/com.example.instorage/info.txt"); FileInputStream fis; try { fis = new FileInputStream(file); //把字节流转换为字符流 BufferedReader br=new BufferedReader(new InputStreamReader(fis)); //读取txt中的用户名和密码 String line=br.readLine(); String[] s=line.split("##"); //ctrl+1可以直接将局部变量设置为全局变量 et_username.setText(s[0]); et_password.setText(s[1]); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
全部的读代码
package com.example.instorage;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.CheckBox;import android.widget.Checkable;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity { private EditText et_username; private EditText et_password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.instorage); readAcount(); } public void readAcount(){ File file=new File("data/data/com.example.instorage/info.txt"); FileInputStream fis; try { fis = new FileInputStream(file); //把字节流转换为字符流 BufferedReader br=new BufferedReader(new InputStreamReader(fis)); //读取txt中的用户名和密码 String line=br.readLine(); String[] s=line.split("##"); //ctrl+1可以直接将局部变量设置为全局变量 et_username.setText(s[0]); et_password.setText(s[1]); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void login (View v){ et_username=(EditText) findViewById(R.id.et_username); et_password=(EditText) findViewById(R.id.et_password); String name=et_username.getText().toString(); String password=et_password.getText().toString(); CheckBox cb=(CheckBox) findViewById(R.id.cb); //判断选框有没有被勾选,调用isChecked() if(cb.isChecked()){ //这就是内部存储空间的路径 //先进行部署,之后通过 Window-show View-other-File Explorer-data/data下找到相应包名的文件 File file=new File("data/data/com.example.instorage/info.txt"); FileOutputStream os; try { os = new FileOutputStream(file); String buffer=name+"##"+password; os.write(buffer.getBytes()); os.close();//记得关闭文件 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show(); }}
优化代码
1、全局变量一般放在onCreate方法中赋初值
2、当第一次使用时,并不存在txt文件,此时读方法就会出现问题,因此需要判断文件是否存在。
public class MainActivity extends Activity { private EditText et_username; private EditText et_password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.instorage); et_username=(EditText) findViewById(R.id.et_username); et_password=(EditText) findViewById(R.id.et_password); readAcount(); } public void readAcount(){ File file=new File("data/data/com.example.instorage/info.txt"); if(file.exists()){ FileInputStream fis; try { fis = new FileInputStream(file); //把字节流转换为字符流 BufferedReader br=new BufferedReader(new InputStreamReader(fis)); //读取txt中的用户名和密码 String line=br.readLine(); String[] s=line.split("##"); //ctrl+1可以直接将局部变量设置为全局变量 et_username.setText(s[0]); et_password.setText(s[1]); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void login (View v){ String name=et_username.getText().toString(); String password=et_password.getText().toString(); CheckBox cb=(CheckBox) findViewById(R.id.cb); //判断选框有没有被勾选,调用isChecked() if(cb.isChecked()){ //这就是内部存储空间的路径 //先进行部署,之后通过 Window-show View-other-File Explorer-data/data下找到相应包名的文件 File file=new File("data/data/com.example.instorage/info.txt"); FileOutputStream os; try { os = new FileOutputStream(file); String buffer=name+"##"+password; os.write(buffer.getBytes()); os.close();//记得关闭文件 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show(); } }
使用API在内部存储器中的读写
使用API在内部存储器中的读写仅需要修改一句话就可以了
1、将File file=new File("data/data/com.example.instorage/info.txt");
修改为
//获得的路径为data/data/com.example.instorage/files File file=new File(getFilesDir(),"info.txt");
2、获得缓存路径,该路径下的内容你不要企图让系统帮你删除,应该自己设定个值删除,比如1MB,因此一些重要的文件还是不要记录在这个文件下。
File file=new File(getCacheDir(),"info.txt");
0 0
- 内部存储的读操作及使用API获得路径
- 使用路径API获取获取内部存储目录的路径
- 使用API获取内部存储文件的路径;外部存储
- android获得内部存储/外部存储路径
- 【收集】系统文件夹路径的系统宏定义及意义,使用SHGetFolderPath API获得路径示例
- 系统文件夹路径的系统宏定义及意义,使用SHGetFolderPath API获得路径示例
- 使用API获取文件内部存储路径详解(getFilesDir()和getCacheDir())
- android--内部存储写文件和使用API获取内部存储路径,sharedperferance获取原有的账号密码--简单的登陆(记录原有的账号和密码)--I/0流介绍
- 用tomcat ,jsp中关于所有路径API总结及 常用的用相对路径获得绝对路径的API
- 一组路径操作的API
- 如何在存储过程内部获得查询的结果
- java文件操作之路径的获得
- 使用cURL操作Openstack对象存储的ReST API
- 使用cURL操作Openstack对象存储的ReST API
- Android获取存储路径API的说明
- 【学习笔记】day2数据存储和界面展现第一天 08_使用api获取内部存储空间路径09_files文件夹与cache文件夹
- Android手机自带内部存储路径的获取
- Android手机自带内部存储路径的获取
- HDU 杭电2501 Tiling_easy version【规律题】
- linux-fdisk/mke2fs/dumpe2fs/fsck
- 写给同事的前端学习路线<转>
- NPOI操作Excel 005:写入空Excel(Winform版)
- 51 N-Queens
- 内部存储的读操作及使用API获得路径
- 指向数组的指针
- Objective-C入门教程——Done!
- 拓扑排序
- [C++]Remove Duplicates from Sorted List 从已排序的链表中移除重复元素
- windons 下如何使用c compiler加cython 加速 word2vec!!!
- 这次带来的小程序是:确定一个字符串有多少个单词,然后最长单词和最短单词有哪些
- 通知
- c++返回引用和返回对象的区别