手機的sd卡的寫入和讀取資料的方

來源:互聯網
上載者:User

標籤:

我們要實現的是:往輸入框輸入資料,點擊一個寫入按鈕,將輸入框內的資料寫入到sd卡上,在點擊讀取按鈕,則將sd卡上只等的檔案名稱內的資料顯示到一個textView上。

首先,看一下XML檔案,很簡單,只有兩個按鈕,一個輸入框,和一個文本控制項;

儲存的資料可以到mnt/sdcard/下查看

<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" >    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="59dp"        android:ems="10" >        <requestFocus />    </EditText>    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/editText1"        android:layout_below="@+id/editText1"        android:layout_marginTop="46dp"        android:text="寫入" />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBaseline="@+id/button1"        android:layout_alignBottom="@+id/button1"        android:layout_alignRight="@+id/editText1"        android:text="讀取" />    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/button2"        android:layout_marginBottom="14dp"        android:layout_toRightOf="@+id/button1"        android:text="TextView" /></RelativeLayout>

  然後是自己建立的一個功能類FileService,主要負責往sd卡上讀取和寫入資料。

package com.example.sdcord;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.content.Context;import android.os.Environment;/** * 主要用於往sd卡上讀取和寫入資料 *  * @author Administrator *  */public class FileService {private Context context;public FileService(Context context) {this.context = context;}/** * 寫入資料 *  * @param fileName *            檔案名稱 * @param context *            檔案內容 * @return 傳回值是false則寫入資料失敗,反之則成功 */public boolean saveFile(String fileName, String context) {boolean flag = false;FileOutputStream fileOutputStream = null;// getExternalStorageDirectory():返回擴充儲存卡的目錄File file = new File(Environment.getExternalStorageDirectory(),fileName);// getExternalStorageState():返回擴充儲存卡的目前狀態,調用此方法,將會// 返回一個String類型狀態值,如果返回的狀態和Environment.MEDIA_MOUNTED(已經掛載並且擁有可讀可寫入權限)//的值一樣的話,說明當前的sd卡可以進行操作if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {try {fileOutputStream = new FileOutputStream(file);fileOutputStream.write(context.getBytes());flag = true;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fileOutputStream != null) {}try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}return flag;}/** *  * @param fileName 檔案名稱稱 * @return以字串表現形式返回讀取到的數據 */public String getFile(String fileName) {FileInputStream fileInputStream = null;//緩衝的流,與磁碟無關,所以不需要關閉ByteArrayOutputStream output = new ByteArrayOutputStream();File file = new File(Environment.getExternalStorageDirectory(),fileName);//判斷sd卡是否可用if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {try {fileInputStream = new FileInputStream(file);int len = 0;byte[] data = new byte[1024];while ((len = fileInputStream.read(data)) != -1) {output.write(data, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}}return new String(output.toByteArray());}}

  接著是activity類,

 1 package com.example.sdcord; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.text.Editable; 6 import android.view.Menu; 7 import android.view.View; 8 import android.view.View.OnClickListener; 9 import android.widget.Button;10 import android.widget.EditText;11 import android.widget.TextView;12 13 public class MainActivity extends Activity implements OnClickListener{14     15     private Button btn1;16     private Button btn2;17     private TextView textView;18     private EditText editText;19 20     @Override21     protected void onCreate(Bundle savedInstanceState) {22         super.onCreate(savedInstanceState);23         setContentView(R.layout.activity_main);24         25         btn1 = (Button) findViewById(R.id.button1);26         btn2 = (Button) findViewById(R.id.button2);27         textView = (TextView) findViewById(R.id.textView1);28         editText = (EditText) findViewById(R.id.editText1);29         30         btn1.setOnClickListener(this);31         btn2.setOnClickListener(this);32         33     }34     35     public void onClick(View view){36         switch(view.getId()){37         case R.id.button1:38             String data1 = editText.getText().toString();39             savaFile("test.txt",data1);40             break;41         case R.id.button2:42             String data2 = readFile("test.txt");43             textView.setText(data2);44             break;45         }46     }47     48     public void savaFile(String dir,String data){49         FileService fileService = new FileService(this);50         fileService.saveFile(dir,data);51     }52     53     public String readFile(String fileName){54         FileService fileService = new FileService(this);55         String data = fileService.getFile(fileName);56         return data;57     }58 59 60     @Override61     public boolean onCreateOptionsMenu(Menu menu) {62         // Inflate the menu; this adds items to the action bar if it is present.63         getMenuInflater().inflate(R.menu.main, menu);64         return true;65     }66     67 }

最後,注意,因為我們的操作涉及到了sd卡的寫入和讀取許可權,所以要在manifest檔案中添加相應的授權資訊

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

 

手機的sd卡的寫入和讀取資料的方

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.