Android數據存儲之SD卡


為了更好的存取應用程序的大文件數據,應用程序需要讀. 寫SD卡上的文件。SD卡大大擴充手機的存儲能力。

操作SD首先要加權限:

<!--在SDCard中創建與刪除文件權限  -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數據權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--  從SDCard讀取數據權限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

讀寫SD卡上的文件請按以下三步進行:

(1)調用Environment的getExternalStorageState()方法判斷手機上是否插入了SD卡,並且應用程序具有讀寫SD卡的權限;

(2)調用Environment的getExternalStorageDirectory()方法來獲取外部存儲器,也就是SD卡的目錄;

(3)使用FileInputStream   FileOutputStream   FileReader或者FileWriter讀寫SD卡里面的文件;

下面以簡單實例說明:

1.XML代碼:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <Button
12         android:id="@+id/button1"
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:layout_alignParentTop="true"
16         android:layout_centerHorizontal="true"
17         android:text="向SD中寫入數據" />
18 
19     <Button
20         android:id="@+id/button2"
21         android:layout_width="match_parent"
22         android:layout_height="wrap_content"
23         android:layout_alignLeft="@+id/button1"
24         android:layout_below="@+id/button1"
25         android:text="從SD卡中讀取數據" />
26 
27 </RelativeLayout>

2.java代碼:

 1 package com.example.filesd;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileInputStream;
 6 import java.io.FileOutputStream;
 7 import java.io.InputStreamReader;
 8 import android.os.Bundle;
 9 import android.os.Environment;
10 import android.app.Activity;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.widget.Button;
14 import android.widget.Toast;
15 
16 public class MainActivity extends Activity {
17     private Button button;
18     private Button button2;
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23         button = (Button) this.findViewById(R.id.button1);
24         button2 = (Button) this.findViewById(R.id.button2);
25         button.setOnClickListener(new OnClickListener() {
26             @Override
27             public void onClick(View arg0) {
28                 writeSDcard("Hello,恭喜您數據讀取了!");
29             }
30         });
31         button2.setOnClickListener(new OnClickListener() {
32             @Override
33             public void onClick(View arg0) {
34                 readSDcard();
35 
36             }
37         });
38     }
39 
40     // 向SD卡寫入數據
41     private void writeSDcard(String str) {
42         try {
43             // 判斷是否存在SD卡
44             if (Environment.getExternalStorageState().equals(
45                     Environment.MEDIA_MOUNTED)) {
46                 // 獲取SD卡的目錄
47                 File sdDire = Environment.getExternalStorageDirectory();
48                 FileOutputStream outFileStream = new FileOutputStream(
49                         sdDire.getCanonicalPath() + "/test.txt");
50                 outFileStream.write(str.getBytes());
51                 outFileStream.close();
52                 Toast.makeText(this, "數據保存到text.txt文件了", Toast.LENGTH_LONG)
53                         .show();
54             }
55         } catch (Exception e) {
56             e.printStackTrace();
57         }
58     }
59 
60     
61     // 從SD卡中讀取數據
62     private void readSDcard() {
63         StringBuffer strsBuffer = new StringBuffer();
64         try {
65             // 判斷是否存在SD
66             if (Environment.getExternalStorageState().equals(
67                     Environment.MEDIA_MOUNTED)) {
68                 File file = new File(Environment.getExternalStorageDirectory()
69                         .getCanonicalPath() + "/test.txt");
70                 // 判斷是否存在該文件
71                 if (file.exists()) {
72                     // 打開文件輸入流
73                     FileInputStream fileR = new FileInputStream(file);
74                     BufferedReader reads = new BufferedReader(
75                             new InputStreamReader(fileR));
76                     String st = null;
77                     while ((st = reads.readLine()) != null) {
78                         strsBuffer.append(st);
79                     }
80                     fileR.close();
81                 } else {
82                     Toast.makeText(this, "該目錄下文件不存在", Toast.LENGTH_LONG).show();
83                 }
84             }
85         } catch (Exception e) {
86             e.printStackTrace();
87         }
88         Toast.makeText(this, "讀取到的數據是:" + strsBuffer.toString() + "",
89                 Toast.LENGTH_LONG).show();
90     }
91 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM