Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 第三十七講:Android數據儲存之SD卡

第三十七講:Android數據儲存之SD卡

編輯:關於Android編程

傲不可長,欲不可縱,樂不可極,志不可滿。—— 魏 徵


本講內容:SD卡

上一講中我們學習了Android的數據存儲采用File,但是這樣的數據是存儲在應用程序內的,即存儲的文件大小有一定要限制的,有時候我們需要存儲更大的文件,比如電影等,這就用到了我們的SDSard存儲卡。


一、在Android系統中,為我們提供了SDCard的一些相關操作,Environment類為我們提供了以下的幾個方法

\

vcmRlcj0="1" width="800" cellspacing="1" cellpadding="1"> public static File getDataDirectory () 獲得Android下的data文件夾的目錄 public static File getDownloadCacheDirectory () 獲得Android Download/Cache 內容的目錄 public static File getExternalStorageDirectory () 獲得Android外部存儲器即SDCard的目錄 public static String getExternalStorageState () 獲得Android外部存儲器的當前狀態 public static File getRootDirectory () 獲得Android下的root文件夾的目錄
常用常量

String MEDIA_MOUNTED 當前Android的外部存儲器可讀可寫 String MEDIA_MOUNTED_READ_ONLY 當前Android的外部存儲器只讀
二、我們通過一個例子感受一下,代碼的講解都寫在注釋裡了

下面是res/layout/activity_main.xml 布局文件:



   
    

在AndroidManifest.xml文件中注冊


  
  
  
  

    

    
        
            
                

                
            
        
    


下面是MainActivity.java主界面文件:

public class MainActivity extends Activity implements OnClickListener {
	private static final String FILE_NAME = "text.txt";
	private Button write;
	private Button read;
	EditText edit;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViews();
	}

	private void findViews() {
		edit = (EditText) findViewById(R.id.edit);
		write = (Button) findViewById(R.id.write);
		read = (Button) findViewById(R.id.read);
		write.setOnClickListener(this);
		read.setOnClickListener(this);
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.write:
			// 先判斷是否有SDCard
			if (Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) {
				String content = edit.getText().toString();
				try {
					// 獲取SDcard路徑
					File dir = Environment.getExternalStorageDirectory();
					// 獲取SDcard路徑名的絕對路徑名字符串。eg:/mnt/sdcard 
					String sdcardPath = dir.getAbsolutePath();
					Toast.makeText(MainActivity.this,"目錄為:" + sdcardPath, Toast.LENGTH_SHORT).show();
					File file = new File(dir, FILE_NAME);
					// 以指定文件創建RandomAccessFile對象
					RandomAccessFile raf = new RandomAccessFile(file, "rw");
					// 將文件記錄指針移動最後
					raf.seek(file.length());
					// 輸出文件內容
					raf.write(content.getBytes());
					raf.close();
				} catch (Exception e) {
				}
			}
			break;
		case R.id.read:
			if (Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) {
				// 獲取SDcard路徑
				StringBuilder sb = new StringBuilder();
				try {
					File dir = Environment.getExternalStorageDirectory();
					File file = new File(dir, FILE_NAME);
					InputStream inputStream = new FileInputStream(file);
					int len = 0;
					byte[] buffer = new byte[1024];
					while ((len = inputStream.read(buffer)) != -1) {
						sb.append(new String(buffer, 0, len));
					}
					Toast.makeText(MainActivity.this,"內容為:" + sb.toString(), Toast.LENGTH_SHORT).show();	
					// 關閉流
					inputStream.close();
				} catch (Exception e) {
				}
			}
		}
	}
}

下面是運行結果:



本講到這裡,謝謝大家!


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