读写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向指定文件写入数据,会把原有的文件内容清空。
- 读写SD卡上的文件
- 读写SD卡上的文件
- 读写SD卡上的文件
- 读写SD卡上的文件
- android读写SD卡上的文件
- 读写SD卡上的文件
- 读写SD卡上的文件
- SD卡上读写文件
- 读写sd卡的文件
- Android读写SD卡上的数据
- SD卡读写文件
- 读写SD卡文件
- sd卡读写文件
- SD卡文件读写
- Android的SD卡文件读写
- Android的SD卡文件读写
- Android 读写SD卡的文件
- Android的SD卡文件读写操作
- Linux Bash Shell学习(六):设置环境参数
- struts2的拦截器(1):拦截器的配置和使用
- 编码总结
- 转载:GCDAsyncSocket的基本用法
- android jni——basic Types, Strings and Arrays
- 读写SD卡上的文件
- Eclipse中的package
- MD5加密字符串
- RTT DEMO
- NuSphere phpED Professional(最强PHP开发) v9.0 Build 9051注册版
- pl/sql中三种游标循环效率对比
- 阿里巴巴电话面试
- java中import的用法
- 01-FTP语言设置