读写sd卡的文件

本文介绍了一种在Android应用中读写SD卡文件的方法。首先检查SD卡状态并确保应用有权限访问,然后通过Environment类获取SD卡路径,并利用FileInputStream、FileOutputStream等类进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了更好的存,取应用中的大文件数据,应用程序需要读,写,sd卡上的文件.sd卡大大的扩充手机的存储能力.
读, 写sd卡上的文件 请安如下步骤,进行.

  1. 调用Environment的 getExternalStorageState()方法 判断手机上是否插入了sd卡,并且应用程序具有读写sd卡的权限.代码提示如下:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

(2)调用Environment 的getExternalStorageDirectory() 方法来获取外部存储器,也就是sd卡的目录.
(3) 使用 FileInputStream FileOutStream FileReader 或者 FileWriter 读,写 sd卡里面的文件


为了读 写 sd卡上的数据,必须在应用程序的清单文件(AndroidManifest.xml)中添加读,写sd卡的权限.<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

package com.test.sdcardtest;

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;

/**
 * 读写sd卡上的文件
 */
public class MainActivity extends AppCompatActivity {

    Button btnWrite, btnRead;
    EditText etWrite;
    TextView tvShow;

final String FILE_NAME = "/sd.txt";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnWrite = (Button) findViewById(R.id.btn_write);
        btnRead = (Button) findViewById(R.id.btn_read);

        tvShow = (TextView) findViewById(R.id.tv_read);
        etWrite = (EditText) findViewById(R.id.et_write);

        btnWrite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                write(etWrite.getText().toString());

                etWrite.setText("");
            }
        });

        btnRead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tvShow.setText(read2());
            }
        });
    }

    private String read2() {

        //如果手机已经安装了sd卡
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            // 获取sd卡的对应的存储目录
            File sdCardDir = Environment.getExternalStorageDirectory();
            //获取指定文件对应的输入流
            try {
                FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath()+FILE_NAME);
                //将指定输入流包装成 BufferedReader
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));

                StringBuilder sb = new StringBuilder("");
                String line = null;
                //循环读取文件内容
                while((line=br.readLine())!=null){
                    sb.append(line);
                }

                //关闭资源
                br.close();
                return  sb.toString();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    private void write(String s) {
        //判断手机是否安装了sd卡
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            //获取SD卡的目录
            File sdCardDir = Environment.getExternalStorageDirectory();

            try {

                File targetFile =new File(sdCardDir.getCanonicalPath()+FILE_NAME);

                //以指定文件创建 RandomAccessFile对象
                RandomAccessFile rdf = new RandomAccessFile(targetFile,"rw");
                //将文件记录指针移动到最后
                rdf.seek(targetFile.length());
                //输出文件
                rdf.write(s.getBytes());
                rdf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值