读写SD卡上的文件

来源:互联网 发布:php 根目录表示方法 编辑:程序博客网 时间:2024/05/29 02:05

通过Context的openFileInput或openFileOutput来打开文件输入流、输出流时,程序所打开的都是应用程序的数据文件夹里的文件,这样文件大小很有限。为了更好地存取应用程序的大文件数据,需要读写SD卡上的文件。

读写SD卡上的文件的步骤:

1、调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且具有读写权限。

2、调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录。

3、使用FileInputStream、FileOutputStream、FileReader或FileWriter读、写SD卡里的文件。

下面通过一个简单实例来演示:

Activity:

package com.lovo.sdcardtest;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.RandomAccessFile;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 MainActivity extends Activity {private EditText edit1;private EditText edit2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取两个按钮Button readBtn = (Button) findViewById(R.id.main_btn_read);Button writeBtn = (Button) findViewById(R.id.main_btn_write);// 获取两个文本框edit1 = (EditText) findViewById(R.id.main_et1);edit2 = (EditText) findViewById(R.id.main_et2);writeBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 将edit1中的内容写入文件中write(edit1.getText().toString());edit1.setText("");}});readBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 读取指定文件中的内容并显示到edit2中edit2.setText(read());}});}private String read() {try {// 如果手机插入了SD卡,而且应用程序具有访问SD卡的权限if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 获取SD卡对应的存储目录File sdCardDir = Environment.getExternalStorageDirectory();// 获取指定文件对应的输入流FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + "/hello");// 将指定输入流包装成BufferedReaderBufferedReader 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 (Exception e) {e.printStackTrace();}return null;}private void write(String content) {try {// 如果手机插入了SD卡,并且应用程序具有访问SD的权限if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 获取SD卡的目录File sdCardDir = Environment.getExternalStorageDirectory();File targetFile = new File(sdCardDir.getCanonicalPath()+ "/hello");// 以指定文件创建 RandomAccessFile对象RandomAccessFile raf = new RandomAccessFile(targetFile, "rw");// 将文件记录指针移到到最后raf.seek(targetFile.length());// 输出文件内容raf.write(content.getBytes());raf.close();}} catch (Exception e) {e.printStackTrace();}}}


布局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="输入内容:" />        <EditText            android:id="@+id/main_et1"            android:layout_width="match_parent"            android:layout_height="wrap_content" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="显示内容:" />        <EditText            android:id="@+id/main_et2"            android:layout_width="match_parent"            android:layout_height="wrap_content" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:orientation="horizontal" >        <Button            android:id="@+id/main_btn_write"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="写入内容" />        <Button            android:id="@+id/main_btn_read"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="20dp"            android:text="读取内容" />    </LinearLayout></LinearLayout>


在配置文件中加入权限:

<!-- 在SD卡中创建于删除文件权限 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 向SD卡写入数据权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


注:程序中使用RandomAccessFile向SD卡指定文件追加内容,如果使用FileOutputStream向指定文件写入数据,会把原有的文件内容清空。

原创粉丝点击