*手機的外部存儲空間,這個我們可以理解成電腦的外接移動硬盤,U盤也行。所有的Android設備都有兩個文件存儲區域:“內部”和“外部”存儲器。這兩個名稱來自早期的Android,當時大多數設備都提供內置的固定的內存(內置存儲器)即ROM中的內部存儲,外加一個可移動的存儲介質,如micro SD卡(外部存儲器)。但也有些設備把固定不變的存儲空間分成“內部”和“外部”兩部分,這樣即使沒有可移動的存儲介質,也總會有兩個存儲空間,并且不管外部存儲器是可移動的,還是固定的,API的行為是相同的。
*?路徑: /mnt/sdcard/
*Environment類
getExternalStorageDirectory(); // 獲取sd卡的路徑
getExternalStorageState(); // 獲取sd卡的狀態
Environment.MEDIA_MOUNTED // 掛載狀態
Environment.MEDIA_UNMOUNTED // 卸載狀態
*?需要添加讀寫SD卡的權限
??????? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
????????<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
?
// 檢查SD卡是不插入和拔出public boolean isSdMounted(View view) {String staus = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(staus)) {System.out.println("插入了SD卡");return true;} else if (Environment.MEDIA_UNMOUNTED.equals(staus)) {System.out.println("SD卡被拔出了");return false;}return false;}// 獲取SD卡的路徑public String getSdPath(View v) {File file = Environment.getExternalStorageDirectory();String path = file.getAbsolutePath();return path;}// 獲取SD卡可用空間@SuppressLint("NewApi")public long getSdFreeSpace(View v) {File file = Environment.getExternalStorageDirectory();return file.getFreeSpace();// 格式化大小 }
package com.example.qq;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 android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils;
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 etPwd;private EditText etQQ;private CheckBox cbRemPwd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etPwd = (EditText) findViewById(R.id.et_pwd);etQQ = (EditText) findViewById(R.id.et_qq);cbRemPwd = (CheckBox) findViewById(R.id.cb_rem_pwd);readData();}/*** 從文件中讀取數據顯示在界面上*/private void readData() {File file = new File("/mnt/sdcard/waibu.txt");try {FileInputStream fis = new FileInputStream(file);BufferedReader br = new BufferedReader(new InputStreamReader(fis));String text = br.readLine();String[] content = text.split("==");String qq = content[0];String pwd = content[1];//把QQ號碼和密碼顯示在文本輸入框etQQ.setText(qq);etPwd.setText(pwd);br.close();} catch (Exception e) {e.printStackTrace();}}/*** 1. 獲取用戶輸入的QQ號碼和密碼* 2. 做非空判斷* 3. 如果用戶勾選了復選框,用文件存儲密碼*/public void gelogin(View v){
// System.out.println("點擊了按鈕");String pwd = etPwd.getText().toString().trim();String qq = etQQ.getText().toString().trim();if(TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)){Toast.makeText(this, "親,請輸入QQ號碼或者密碼哦 :) ", 0).show();return;}//判斷用戶是否勾選復選框boolean checked = cbRemPwd.isChecked();if (checked) {//用文件存儲密碼try {File file = new File("/mnt/sdcard/waibu.txt");FileOutputStream fos = new FileOutputStream(file);String text = qq+"=="+pwd;fos.write(text.getBytes());//釋放資源fos.close();Toast.makeText(this, "密碼存儲成功,/mnt/sdcard/waibu.txt", 0).show();} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "存儲失敗了 :( ", 0).show();}}}}
?
?