•java代码:
package com.bokeyuan.rwinsd; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import com.bokeyuan.rwinsd.R; import android.os.Bundle; import android.os.Environment; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_name; private EditText et_pass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_name = (EditText) findViewById(R.id.et_name); et_pass = (EditText) findViewById(R.id.et_pass); readAccount(); } public void login(View v){ String name = et_name.getText().toString(); String pass = et_pass.getText().toString(); CheckBox cb = (CheckBox) findViewById(R.id.cb); if(cb.isChecked()){ //检测sd卡当前是否可用 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ // File file = new File("sdcard/info.txt"); //返回一个file对象,包含的路径就是sd卡的真实路径 File file = new File(Environment.getExternalStorageDirectory(), "info.txt"); try { FileOutputStream fos = new FileOutputStream(file); fos.write((name + "##" + pass).getBytes()); fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ Toast.makeText(this, "sd卡不可用哟亲", 0).show(); } } //弹出提示框,提示用户登录成功 Toast.makeText(this, "登陆成功", 0).show(); } public void readAccount(){ // File file = new File("sdcard/info.txt"); File file = new File(Environment.getExternalStorageDirectory(), "info.txt"); if(file.exists()){ try { FileInputStream fis = new FileInputStream(file); //把字节流转换成字符流 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String text = br.readLine(); String[] s = text.split("##"); et_name.setText(s[0]); et_pass.setText(s[1]); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
注:
•//此api会把文件写到data/data/com.itheima.permission/files/文件夹下
•FileOutputStream fos = openFileOutput("info1.txt", MODE_PRIVATE) ;
•//此api会把文件读到data/data/com.itheima.permission/files/文件夹下
•FileOutputStream fos = openFileOutput("info1.txt", MODE_PRIVATE) ;
•所以,以后用Android 自带的API。可以看下面openFileOutput四种模式的小例子:
•openFileOutput的四种模式
•MODE_PRIVATE = 0: -rw-rw---- •MODE_APPEND = 32768: -rw-rw---- •MODEWORLDREADABLE = 1: -rw-rw-r-- •MODEWORLDWRITEABLE = 2: -rw-rw--w-
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND。
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
• 注:
•在Android中,每一个应用是一个独立的用户
•drwxrwxrwx
•第1位:d表示文件夹,-表示文件
•第2-4位:rwx,表示这个文件的拥有者用户(owner)对该文件的权限 •r:读
•w:写
•x:执行
•第5-7位:rwx,表示跟文件拥有者用户同组的用户(grouper)对该文件的权限
•第8-10位:rwx,表示其他用户组的用户(other)对该文件的权限
•布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="创建文件1" android:onClick="click1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="创建文件2" android:onClick="click2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="创建文件3" android:onClick="click3" /> </LinearLayout>
•代码:
package com.bokeyuan.permission; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.view.Menu; import android.view.View; @SuppressLint("WorldReadableFiles") public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click1(View v){ //此api会把文件写到data/data/com.bokeyuan.permission/files/文件夹下 try { FileOutputStream fos = openFileOutput("info1.txt", MODE_PRIVATE) ; fos.write("该文件是私有数据,只能被应用本身访问".getBytes()); fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void click2(View v){ //此api会把文件写到data/data/com.bokeyuan.permission/files/文件夹下 try { @SuppressWarnings("deprecation") FileOutputStream fos = openFileOutput("info2.txt", MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE) ; fos.write("当前文件可以被其他应用读取或写入".getBytes()); fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void click3(View v){ //此api会把文件写到data/data/com.bokeyuan.permission/files/文件夹下 try { @SuppressWarnings("deprecation") FileOutputStream fos = openFileOutput("info3.txt", MODE_WORLD_WRITEABLE) ; fos.write("当前文件可以被其他应用写入".getBytes()); fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
•获取SD卡剩余容量:
•有时候读写文件的时候,需要判断SD卡的剩余容量,再进行写入操作。下面小例子,引用Android系统底层的API,获取SD卡的剩余容量。
•布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
•Java代码:
package com.bokeyuan.getsdavail; import java.io.File; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.StatFs; import android.app.Activity; import android.text.format.Formatter; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize; long totalBlocks; long availableBlocks; //检测系统当前版本号 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){ blockSize = stat.getBlockSizeLong(); totalBlocks = stat.getBlockCountLong(); availableBlocks = stat.getAvailableBlocksLong(); } else{ blockSize = stat.getBlockSize(); totalBlocks = stat.getBlockCount(); availableBlocks = stat.getAvailableBlocks(); } TextView tv = (TextView) findViewById(R.id.tv); tv.setText(formatSize(availableBlocks * blockSize)); } private String formatSize(long size) { return Formatter.formatFileSize(this, size); } }
以上所述给大家介绍了Android开发笔记之Android中数据的存储方式(一)的相关知识,希望本文分享能够帮助到大家。下篇给android开发笔记之android中数据的存储方式(二),感兴趣的朋友点击了解详情。
标签:SQLite
相关阅读 >>
python web框架之django框架model基础详解
andriodstudio利用listview和数据库实现简单学生管理
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。