zoukankan      html  css  js  c++  java
  • android SD卡文件的读写

    SD卡使用的是FAT(File Allocation Table)的文件系统,不支持访问模式和权限控制,SD卡适用于保存大尺寸的文件或者是一些无需设置访问权限的文件 Android模拟器支持SD卡,但模拟器中没有缺省的SD卡,开发人员须在模拟器中手工添加SD卡的映像文件 为了读\写SD卡上的文件,必须在AndroidManifest.xml中添加读\写SD卡的权限 在SD卡上创建与删除文件的权限        Android.permission.MOUNT_UNMOUNT_FIFESYSTEMS 向SD卡写入数据的权限         Android.permission.WRITE_EXTERNAL_STORAGE

    编程访问SD卡方法一 首先需要检测系统的/mnt/sdcard目录是否可用 使用文件的输入输出流对SD卡里的文件进行读写 编程访问SD卡方法二 调用Environment的getExternalStorageState()方法判断手机上是否有SD卡,并且应用程序具有读写SD卡的权限  Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的根目录 使用文件的输入输出流对SD卡里的文件进行读写.

    核心代码

    写入文件到sd卡 //如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState()  .equals(Environment.MEDIA_MOUNTED)) {  //获取SD卡的目录  File sdCardDir = Environment.getExternalStorageDirectory();  File targetFile = new File(sdCardDir.getCanonicalPath()+ FILE_NAME);  //以指定文件创建          RandomAccessFile对象,第一个参数是文件名称,第二个参数是读写模式  RandomAccessFile raf = new RandomAccessFile(targetFile , "rw");  //将文件记录指针移动到最后  raf.seek(targetFile.length());  // 输出文件内容  raf.write(content.getBytes());  raf.close(); }

    读取sd卡的文件 //如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState()  .equals(Environment.MEDIA_MOUNTED))  {  //获取SD卡对应的存储目录  File sdCardDir = Environment.getExternalStorageDirectory();  //获取指定文件对应的输入流  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);   } //返回读出的内容,并把它转化为字符串              return sb.toString();   }

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

    下面列举一个实例,主要是按下写入按钮后把EditText的内容写入到sd卡里,然后按下读取按钮后就可以把sd卡里的文件读出来

    第一步是编写main.xml文件

    复制代码
     1 <?xml version="1.0" encoding="utf-8"?>  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     android:orientation="vertical"  4     android:layout_width="fill_parent"  5     android:layout_height="fill_parent">  6 <EditText android:id="@+id/edit1"  7     android:layout_width="fill_parent"  8     android:layout_height="wrap_content"  9     android:lines="4"/> 10 <Button android:id="@+id/write" 11     android:layout_width="wrap_content" 12     android:layout_height="wrap_content"  13     android:text="@string/write"/> 14 <EditText android:id="@+id/edit2" 15     android:layout_width="fill_parent" 16     android:layout_height="wrap_content" 17     android:editable="false" 18     android:cursorVisible="false" 19     android:lines="4"/>         20 <Button android:id="@+id/read" 21     android:layout_width="wrap_content" 22     android:layout_height="wrap_content"  23     android:text="@string/read"/> 24 </LinearLayout>
    复制代码

    第二步:写入核心代码:

    复制代码
      1 package cn.edu.zwu.tel;   2    3 import java.io.BufferedReader;   4 import java.io.File;   5 import java.io.FileInputStream;   6 import java.io.InputStreamReader;   7 import java.io.RandomAccessFile;   8 import android.app.Activity;   9 import android.os.Bundle;  10 import android.os.Environment;  11 import android.view.View;  12 import android.view.View.OnClickListener;  13 import android.widget.Button;  14 import android.widget.EditText;  15 import android.os.Bundle;  16   17 public class FileSDsaveTest02Activity  extends Activity  18 {  19     final String FILE_NAME = "/FileSDTest.ini";  20   21     @Override  22     public void onCreate(Bundle savedInstanceState)  23     {  24         super.onCreate(savedInstanceState);  25         setContentView(R.layout.main);  26         // 获取两个按钮 27         Button read = (Button) findViewById(R.id.read);  28         Button write = (Button) findViewById(R.id.write);  29         // 获取两个文本框 30         final EditText edit1 = (EditText) findViewById(R.id.edit1);  31         final EditText edit2 = (EditText) findViewById(R.id.edit2);  32         // 为write按钮绑定事件监听器 33         write.setOnClickListener(new OnClickListener()  34         {  35             @Override  36             public void onClick(View source)  37             {  38                 // 将edit1中的内容写入文件中 39                 write(edit1.getText().toString());  40                 edit1.setText("");  41             }  42         });  43   44         read.setOnClickListener(new OnClickListener()  45         {  46             @Override  47             public void onClick(View v)  48             {  49                 // 读取指定文件中的内容,并显示出来 50                 edit2.setText(read());  51             }  52         });  53     }  54   55     private String read()  56     {  57         try  58         {  59             //如果手机插入了SD卡,而且应用程序具有访问SD的权限 60             if (Environment.getExternalStorageState()  61                 .equals(Environment.MEDIA_MOUNTED))  62             {  63                 //获取SD卡对应的存储目录 64                 File sdCardDir = Environment.getExternalStorageDirectory();  65                 //获取指定文件对应的输入流 66                 FileInputStream fis = new FileInputStream(sdCardDir  67                     .getCanonicalPath()    + FILE_NAME);  68                 //将指定输入流包装成BufferedReader 69                 BufferedReader br = new BufferedReader(new   70                     InputStreamReader(fis));  71                 StringBuilder sb = new StringBuilder("");  72                 String line = null;  73                 while((line = br.readLine()) != null)  74                 {  75                     sb.append(line);  76                 }  77                 return sb.toString();  78             }  79         }  80         catch (Exception e)  81         {  82             e.printStackTrace();  83         }  84         return null;  85     }  86   87     private void write(String content)  88     {  89         try  90         {      91             //如果手机插入了SD卡,而且应用程序具有访问SD的权限 92             if (Environment.getExternalStorageState()  93                 .equals(Environment.MEDIA_MOUNTED))  94             {  95                 //获取SD卡的目录 96                 File sdCardDir = Environment.getExternalStorageDirectory();  97                 File targetFile = new File(sdCardDir.getCanonicalPath()  98                     + FILE_NAME);  99                 //以指定文件创建    RandomAccessFile对象,第一个参数是文件名称,第二个参数是读写模式100                 RandomAccessFile raf = new RandomAccessFile( 101                     targetFile , "rw"); 102                 //将文件记录指针移动到最后103                 raf.seek(targetFile.length()); 104                 // 输出文件内容105                 raf.write(content.getBytes()); 106                 raf.close(); 107             } 108         } 109         catch (Exception e) 110         { 111             e.printStackTrace(); 112         } 113     } 114 }
    复制代码

    第三步:修改AndroidMainFest文件,主要是加入权限

    复制代码
     1 <?xml version="1.0" encoding="utf-8"?>  2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  3     package="cn.edu.zwu.tel"  4     android:versionCode="1"  5     android:versionName="1.0" >  6   7     <uses-sdk android:minSdkVersion="8" />  8   9     <application 10         android:icon="@drawable/ic_launcher" 11         android:label="@string/app_name" > 12         <activity 13             android:name=".FileSDsaveTest02Activity" 14             android:label="@string/app_name" > 15             <intent-filter> 16                 <action android:name="android.intent.action.MAIN" /> 17  18                 <category android:name="android.intent.category.LAUNCHER" /> 19             </intent-filter> 20         </activity> 21     </application> 22    <!-- 在SD卡中创建与删除文件权限 --> 23     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 24     <!-- 向SD卡写入数据权限 --> 25     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 26 </manifest>
    复制代码

    效果图:

  • 相关阅读:
    我的云之旅hadoop集群(3)
    动态域名绑定
    我的云之旅hadoop集群集成Hive(4)
    Axis2实践
    PHP Apache Mysql搭建
    JavaEE程序员必读图书大推
    我的云之旅hadoop集群集成Hbase集群(5)
    本博客总排名进入前100
    关系数据库及NoSql图书大推荐
    Last_IO_Errno: 1032
  • 原文地址:https://www.cnblogs.com/fx2008/p/3137977.html
Copyright © 2011-2022 走看看