Android存儲 - SD卡或者文件存儲實現。

jopen 12年前發布 | 46K 次閱讀 Android Android開發 移動開發

Android實現SD卡和實現內存文件存儲的做法基本是一樣的。只是取得文件路徑的方法不一樣,基本上跟java的文件操作是一致的,下面是程序的代碼。配置取的位置和實現有所不同,其他是一樣的,下面是代碼:

main.xml:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent">  
    <EditText android:id="@+id/edit1"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:lines="4"/>  
    <Button android:id="@+id/write"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"   
        android:text="@string/write"/>  
    <EditText android:id="@+id/edit2"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:editable="false"  
        android:cursorVisible="false"  
        android:lines="4"/>        
    <Button android:id="@+id/read"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"   
        android:text="@string/read"/>  
    </LinearLayout>  
在AndroidManifest清單文件中要對SD卡讀取進行支持。代碼如下:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
在String.xml中添加兩個內容:
    <string name="read">讀取</string>  
    lt;string name="write">寫入</string>   
下面是文件實現的代碼:
package cn.jason.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class FileTestActivity extends Activity {

    final String FILE = "jason.bin";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button read = (Button) findViewById(R.id.read);
        Button write = (Button) findViewById(R.id.write);

        final EditText edit1 = (EditText) findViewById(R.id.edit1);
        final EditText edit2 = (EditText) findViewById(R.id.edit2);


        write.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                write(edit1.getText().toString());
                edit1.setText("");
            }
        });

        read.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                edit2.setText(read());
            }
        });
    }


    private String read() {
        try {
            FileInputStream fis = openFileInput(FILE);
            byte[] buffer = new byte[1024];
            int hasRead = 0;
            StringBuilder sb = new StringBuilder("");
            while ((hasRead = fis.read(buffer)) > 0) {
                sb.append(new String(buffer, 0, hasRead));
            }
            return sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private void write(String content)
    {
        try
        {
            // 以追加模式打開文件輸出流
            FileOutputStream fos = openFileOutput(FILE, MODE_APPEND);
            // 將FileOutputStream包裝成PrintStream
            PrintStream ps = new PrintStream(fos);
            // 輸出文件內容
            ps.println(content);
            ps.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

下面是sd卡存儲實現的代碼:

package cn.jason.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.net.ContentHandler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class SDCardTestActivity extends Activity {

    final String FILE = "/jason.bin";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button read = (Button) findViewById(R.id.read);
        Button write = (Button) findViewById(R.id.write);
        // 獲取兩個文本框
        final EditText edit1 = (EditText) findViewById(R.id.edit1);
        final EditText edit2 = (EditText) findViewById(R.id.edit2);
        // 為write按鈕綁定事件監聽器
        write.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View source) {
                // 將edit1中的內容寫入文件中
                write(edit1.getText().toString());
                edit1.setText("");
            }
        });

        read.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 讀取指定文件中的內容,并顯示出來
                edit2.setText(read());
            }
        });
    }

    private String read() {
        // 如果手機插入了SD卡,而且應用程序具有訪問SD的權限

        try {
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                // 獲取SD卡的目錄
                File sdDirFile = Environment.getExternalStorageDirectory();
                //獲取指定文件對應的輸入流
                FileInputStream fis = new FileInputStream(sdDirFile.getCanonicalPath()+ FILE);
                //將指定輸入流包裝成BufferedReader
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));

                StringBuilder sb = new StringBuilder("");
                String line = null;
                while ((line =br.readLine())!=null) {
                    sb.append(line);
                }
                return sb.toString();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private void write(String context){
        try {
            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                File sdDir = Environment.getExternalStorageDirectory();
                File targetFile = new File(sdDir.getCanonicalPath()+ FILE);
                RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");
                raf.seek(targetFile.length());
                raf.write(context.getBytes());
                raf.close();
            }
        } catch (Exception e) {
        }
    }
}
轉自:http://blog.csdn.net/jasonchris/article/details/7619468

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!