Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android數據存儲之文件

Android數據存儲之文件

編輯:關於Android編程

文件 Android中對文件的操作和Java是一樣的。
Android系統中存儲系統分為內部存儲和外部存儲兩種
內部存儲空間

RAM內存:運行內存,相當於電腦的內存。

ROM內存:存儲內存,相當於電腦的硬盤

在ROM內存中寫寫數據不需要權限

在Android中,組件之間不能相互轉換EditText不能轉換成EditText

案例記住登錄用戶名和密碼:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/name"

android:hint="請輸入用戶名:" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/password"

android:password="true"

android:hint="請輸入密碼:" />

android:layout_width="fill_parent"

android:layout_height="match_parent"

>

android:id="@+id/login"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:text="登錄"

android:onClick="login"/>

android:id="@+id/check"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/login"

android:layout_alignBottom="@+id/login"

android:layout_centerVertical="true"

android:text="記住用戶名" />

 

 

 

 

package com.test.storage;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

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.EditText;

import android.widget.Toast;

public class MainActivity extends Activity {

private EditText et_name = null;

private EditText et_password = null;

private String name ="";

private String password="";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//全局變量的初始化,最好放在onCreate方法中

//不要提前獲取組件的值,有可能會導致下一次使用時值改變或者為空

/* et_name = (EditText) this.findViewById(R.id.name);

et_password = (EditText) this.findViewById(R.id.password);

name = et_name.getText().toString().trim();

password = et_password.getText().toString().trim();*/

et_name = (EditText) this.findViewById(R.id.name);

et_password = (EditText) this.findViewById(R.id.password);

try {

readInfo();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

public void login(View v) throws IOException{

 

name = et_name.getText().toString().trim();

password = et_password.getText().toString().trim();

CheckBox cb = (CheckBox) this.findViewById(R.id.check);

//判斷checkbox是否被選中

if (cb.isChecked()) {

 

//內部存儲空間的路徑data/data/包名 在RAM

//最好通過上下文Context可以獲取上下文的環境信息,getFilesDir():/data/data/當前包名.apirwinfrom/files/文件名

//File file = new File(getFilesDir(), "userinfo.txt");

//這種方式不好,當包名一旦改變,就會報異常。

File file = new File("data/data/com.test.storage/info.txt");

if (!file.exists()) {

file.createNewFile();

}

FileOutputStream fos = new FileOutputStream(file);

fos.write((name+" "+password).getBytes());

fos.flush();

fos.close();

 

}

//創建彈出對話框,參數:上下文內容 文本內容 顯示時間

Toast.makeText(this, "登錄成功",Toast.LENGTH_SHORT).show();

 

}

 

public void readInfo() throws IOException{

File file = new File("data/data/com.test.storage/info.txt");

if(file.exists()){

FileInputStream fis = new FileInputStream(file);

BufferedReader br = new BufferedReader(new InputStreamReader(fis));

String line = null;

line = br.readLine();

String[] userInfo = line.split(" ");

et_name.setText(userInfo[0]);

et_password.setText(userInfo[1]);

}

}

}

 

當手機內部存儲空間不足時,Cache中文件會被刪除。重要的信息不要保存在Cache中。網絡中的照片可以保存在Cache中。

清空緩存是清空Cache文件夾下的所有內容。

清空數據是清空應用程序獨立空間下的所有內容,包括緩存。

 

 

外部存儲空間

sdcard:相當於電腦的移動硬盤

sdcard的位置:

Android2.3之前,sdcard路徑:在根目錄下sdcard文件夾

Android4.3版本之前,sdcard路徑:mnt/sdcard

Android4.3開始,sdcard路徑:storage/sdcard

為了兼容低版本的程序,Android在之前各個版本的sdcard目錄下都留下了快捷方式,指向storage/sdcard

在外部存儲空間寫文件,需要添加權限 在sdcard中讀數據不需要權限。

如果用戶選擇了保護sdcard的選項,則讀取sdcard的文件上的數據,也是要權限的。

android.permission.READ_EXTERNAL_STORAGE

 

package com.test.storage;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

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 = null;

private EditText et_password = null;

String name = "";

String password = "";

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 全局變量的初始化,最好放在onCreate方法中

// 不要提前獲取組件的值,有可能會導致下一次使用時值改變或者為空

/*

* et_name = (EditText) this.findViewById(R.id.name); et_password =

* (EditText) this.findViewById(R.id.password); name =

* et_name.getText().toString().trim(); password =

* et_password.getText().toString().trim();

*/

et_name = (EditText) this.findViewById(R.id.name);

et_password = (EditText) this.findViewById(R.id.password);

try {

readInfo();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

public void login(View v) throws IOException {

name = et_name.getText().toString().trim();

password = et_password.getText().toString().trim();

CheckBox cb = (CheckBox) this.findViewById(R.id.check);

// 判斷checkbox是否被選中

if (cb.isChecked()) {

 

// 這種方式不好,當包名一旦改變,就會報異常。

// File file = new File("sdcard/info.txt");

// 使用sdcard之前必須要檢測sdcard的狀態

/**

* MEDIA_REMOVED:sdcard不存在 MEDIA_UNKNOWN:不能識別sdcard

* MEDIA_UNMOUNTED:sd存在但是沒有掛載上 MEDIA_MOUNTED :sdcard已經掛載,可正常使用

* MEDIA_MOUNTED_READ_ONLY:sdcard只讀 MEDIA_CHECKING:sdcard正在准備

*/

if (Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

// 最好通過上下文Context可以獲取上下文的環境信息,返回的是sdcard的真實路徑

File file = new File(Environment.getExternalStorageDirectory(),

"userinfo.txt");

if (!file.exists()) {

file.createNewFile();

}

FileOutputStream fos = new FileOutputStream(file);

fos.write((name + " " + password).getBytes());

fos.flush();

fos.close();

 

}

} else {

Toast.makeText(this, "sdcard不可以用", Toast.LENGTH_SHORT);

}

// 創建彈出對話框,參數:上下文內容 文本內容 顯示時間

Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();

 

}

 

public void readInfo() throws IOException {

// File file = new File("sdcard/info.txt");

if (Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

File file = new File(Environment.getExternalStorageDirectory(),

"userinfo.txt");

if (file.exists()) {

FileInputStream fis = new FileInputStream(file);

BufferedReader br = new BufferedReader(new InputStreamReader(

fis));

String line = null;

line = br.readLine();

String[] userInfo = line.split(" ");

et_name.setText(userInfo[0]);

et_password.setText(userInfo[1]);

}

}

}

}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved